RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-226435

Igor Pawus's questions

Martin Hope
Igor Pawus
Asked: 2024-08-01 01:33:28 +0000 UTC

如何正确地专门化模板?

  • 5

我正在尝试制作类似于书中示例的东西,但它不起作用。

模板示例

我尝试了不同的选择。和typename Space = int, 和class Stack<bool, Space = int>.没有任何帮助。最接近的似乎是:

template <typename T, int Space = 4096>
class Stack
{

};

template <template Space>
class Stack<bool>
{

};

但事实证明,即使你完全做到了,仍然不行。抛出 - E0707 需要模板参数列表,而 E0840 不允许在主模板声明中使用模板参数列表:

template <template T1, template T3>
class Temp <T1, int, T3>
{

};

这可能是一个错字吗?或者我错过了什么?

UPD。我很抱歉没有解释清楚。我会尝试更详细。在此之前,我从小做起。起初我只是简单地写了一个存储元素的Stack类。其大小是固定的。那些。声明了一个私有字段int space = 20。然后添加了一个模板。并调试了一下。查看版本:

template <typename T>
class Stack
{

};

template <>
class Stack<bool>
{

};

可行,但最后一步造成了最大的困难。我不知道如何正确地将另一个参数添加到模板和专业化中。

c++
  • 2 个回答
  • 39 Views
Martin Hope
Igor Pawus
Asked: 2024-04-14 18:08:03 +0000 UTC

寻找 Visual Studio 的组件

  • 5

一次偶然的机会,有段时间,一台旧笔记本电脑落入了我的手中。安装了 Visual Studio 2012 Professional。我发现只需点击几下鼠标即可用 C++ 创建 wpf 项目。

创建一个项目

我还想多感受一下。因此,我尝试在我的电脑上设置 Visual Studio 2019,也许是因为我有社区版本,所以无法做到这一点?我尝试在 Visual Studio 安装程序中安装所有与 C++ 相关的组件,但是当我启动 ide 时,所需的项目类型不存在。

如果有人也感兴趣 - 添加。截图:

应用程序.xaml

应用程序.xaml代码

样本页

键

看来这个IDE不再受支持了。寻找更新解决方案的另一个原因。

毛刺

wpf
  • 1 个回答
  • 26 Views
Martin Hope
Igor Pawus
Asked: 2023-11-11 23:23:13 +0000 UTC

如果我设置自己的表单,MenuItem 周围的黑色区域

  • 5

我正在尝试实现我自己的菜单样式,但找不到需要覆盖的内容。为了进行比较,我创建了一个没有菜单的单独项目,并且弹出窗口正确显示。 正确的弹出窗口

和代码:

    <Canvas>
    <Button x:Name="button" Content="show" Canvas.Left="10" Canvas.Top="10" Click="button_Click"/>
    <Popup x:Name="popup" Placement="Center" HorizontalOffset="10" VerticalOffset="10" AllowsTransparency="True" PopupAnimation="Slide">
        <Popup.Resources>
            <Style x:Key="opac"><!-- просто анимация, ничего интересного -->

            </Style>
        </Popup.Resources>
        <StackPanel Opacity="0" Style="{StaticResource opac}">
            <Path Margin="10,0,0,0" Fill="#e5323232" Data="M 0 6 L 6 0 L 12 6 Z"/>
            <Border CornerRadius="3,3,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Padding="10,7" BorderThickness="0" Background="#e5323232">
                <StackPanel>
                    <TextBlock Foreground="White">
            Очередное ничего не значащее, чтобы забить пространство
                    </TextBlock>
                </StackPanel>
            </Border>
        </StackPanel>
    </Popup>
    <Button x:Name="button1" Content="hide" Canvas.Left="110" Canvas.Top="10" Click="button1_Click"/>
</Canvas>

但是当我尝试在菜单中执行相同的操作时,会添加黑色区域,但我无法摆脱。

有问题的弹出窗口

        <Style TargetType="{x:Type MenuItem}">
        <Setter Property="Foreground" Value="White"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type MenuItem}">
                    <Border x:Name="templateRoot" SnapsToDevicePixels="True">
                        <Grid Margin="-1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            <Path x:Name="GlyphPanel" Data="F1M10,1.2L4.7,9.1 4.5,9.1 0,5.2 1.3,3.5 4.3,6.1 8.3,0 10,1.2z" Fill="#e5323232"/>
                            <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="1" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                            <Popup Focusable="False" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" Placement="Right">
                                <StackPanel>
                                    <Path Margin="10,0,0,0" Fill="#e5323232" Data="M 0 6 L 6 0 L 12 6 Z"/>
                                    <Border CornerRadius="3,3,0,0" HorizontalAlignment="Center" VerticalAlignment="Top" Padding="10,7" BorderThickness="0" Background="#e5323232">
                                        <StackPanel>
                                            <ItemsPresenter KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/>
                                        </StackPanel>
                                    </Border>
                                </StackPanel>
                            </Popup>
                        </Grid>
                    </Border>

                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/>
                            <Setter Property="Visibility" TargetName="Icon" Value="Collapsed"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Background" Value="#e5323232"/>
    </Style>
wpf
  • 1 个回答
  • 22 Views
Martin Hope
Igor Pawus
Asked: 2023-09-29 01:11:46 +0000 UTC

如何正确调整用户控件的大小?

  • 6

我正在学习 WPF,但我对 MeasureOverride 和 ArrangeOverride 的定义很困惑。我写了一个圆形进度条,但由于初始化期间的某种原因,如果您每次不指定高度和/或宽度,那么您最终可能会得到另一种形状,而不是椭圆形。如果我理解正确的话,那么理想情况下它应该填充所有可用空间。如果这是错误的,请纠正我。

用户控件本身如下所示:

<UserControl x:Class="Round_progress_bar.UserProgBar"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         Name="UserProgressBar"
         mc:Ignorable="d" 
         d:DesignHeight="100" d:DesignWidth="100">
<Canvas x:Name="canv">
    <Path x:Name="path_fon" Fill="{Binding ElementName=UserProgressBar, Path=HighColor}" Canvas.Left="0" Canvas.Top="0">
        <!--фон-->
        <Path.Data>
            <EllipseGeometry x:Name="fon_ellipse" Center="50, 50" RadiusX="50" RadiusY="50"/>
        </Path.Data>
    </Path>
    <Path Fill="{Binding ElementName=UserProgressBar, Path=LowColor}" Canvas.Left="0" Canvas.Top="0"> // из-за того, что при обращении к неприсвоенному значению Canvas.Left можно получить исключение, добавил нули
        <!--вертим-->
        <Path.Data>
            <PathGeometry>
                <PathFigure StartPoint="100,50" x:Name="din_path">
                    <LineSegment Point="50,50" x:Name="horiz_line"/>
                    <LineSegment x:Name="run_point" Point="50,0"/>
                    <!--двигается-->
                    <ArcSegment x:Name="duga" Point="100,50" Size="50,50" SweepDirection="Clockwise" IsLargeArc="False" IsStroked="True"/>
                </PathFigure>
            </PathGeometry>
        </Path.Data>
    </Path>
    <Path x:Name="path_hole" Fill="{Binding ElementName=UserProgressBar, Path=CenterColor}" Canvas.Left="0" Canvas.Top="0">
        <!--дыра-->
        <Path.Data>
            <EllipseGeometry x:Name="hole_ellipse" Center="50, 50" RadiusX="40" RadiusY="40"/>
        </Path.Data>
    </Path>
</Canvas>

那些。有 2 个椭圆,一个在后面,一个在前面,中间有一个 PathGeometry。其中,有一条水平的固定线,它连接到一条可移动的线,该可移动的线的一端沿着椭圆移动。它们被 ArcSegment 关闭。我对 PathGeometry 没有直接的疑问;这个图是按预期绘制的。有时他会把椭圆扔到一边,有时他会画正方形。

我尝试尽早设置渲染。为此,我将部分代码从 ArrangeOverride 移至单独的方法中,并尝试从构造函数和 ArrangeOverride 中调用,但这没有帮助。

    protected override Size MeasureOverride(Size constraint)
    {
        double min_size = 2 * ThicknessBar;

        if (constraint.Height < min_size)
        {
            constraint.Height = min_size;
        }
        if (constraint.Width < min_size)
        {
            constraint.Width = min_size;
        }

        return base.MeasureOverride(constraint);
    }

    protected override Size ArrangeOverride(Size arrangeBounds)
    {
        a = arrangeBounds.Width / 2;
        b = arrangeBounds.Height / 2;

        Moulding();

        return base.ArrangeOverride(arrangeBounds);
    }

    private void Moulding()
    {
        double to_a = 2 * a;
        fon_ellipse.RadiusX = a;
        fon_ellipse.RadiusY = b;
        double thik = ThicknessBar;
        hole_ellipse.RadiusX = a - thik;
        hole_ellipse.RadiusY = b - thik;

        din_path.StartPoint = new Point(to_a, b);
        horiz_line.Point = new Point(a, b);

        duga.Point = new Point(to_a, b);
        duga.Size = new Size(a, b);

        //Canvas.SetLeft(canv.Children[0] as Path, a / 2); - подобные попытки улучшали ситуцию
        //Canvas.SetTop(canv.Children[0] as Path, b / 4);    в одних случаях, но портили в
        //Canvas.SetLeft(canv.Children[1] as Path, a / 2);   других
        //Canvas.SetTop(canv.Children[1] as Path, b / 2);
        //Canvas.SetLeft(canv.Children[2] as Path, a / 2);
        //Canvas.SetTop(canv.Children[2] as Path, b / 4);

        Position();
    }

为了澄清这一点,我设置了一个依赖属性来监视第二个椭圆的半径:

    private static void OnThicknessBarChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        UserProgBar progBar = d as UserProgBar;
        double fon_x = progBar.fon_ellipse.RadiusX;
        double fon_y = progBar.fon_ellipse.RadiusY;

        progBar.hole_ellipse.RadiusX = fon_x - (double)e.NewValue;
        progBar.hole_ellipse.RadiusY = fon_y - (double)e.NewValue;
    }

因此,所有这些都导致了 gif 中显示的结果: 包含所有元素的 GIF

GIF,其中一个椭圆被赋予透明颜色

我已经不知道为什么会这样了。请告诉我下一步该走哪条路。

UPD。突然我明白了如何解决这个问题。我添加字段纯粹是为了诊断目的,现在可以将其删除。我在工作时追踪了他们的价值观:

1)

<TextBlock Grid.Column="2" Grid.Row="0">
        <Run>DinCenter {</Run>
        <Run x:Name="dinct_x"></Run>
        <Run>, </Run>
        <Run x:Name="dinct_y"></Run>
        <Run>}</Run>
        <LineBreak/>
        <Run>FonCenter {</Run>
        <Run x:Name="fonct_x"/>
        <Run>, </Run>
        <Run x:Name="fonct_y"/>
        <Run>}</Run>
    </TextBlock>
dinct_x.Text = Convert.ToString(progressbar.DinCenter.X);
dinct_y.Text = Convert.ToString(progressbar.DinCenter.Y);
fonct_x.Text = Convert.ToString(progressbar.FonCenter.X);
fonct_y.Text = Convert.ToString(progressbar.FonCenter.Y);
  1. 还有田地本身

     private Point dincenter;
     private Point foncenter;
     public Point DinCenter
     {
         get { return dincenter; }
         set
         {
             dincenter = value;
             OnPropertyChanged("DinCenter");
         }
     }
    
     public Point FonCenter
     {
         get { return foncenter; }
         set
         {
             foncenter = value;
             OnPropertyChanged("FonCenter");
         }
     }
    
     public event PropertyChangedEventHandler PropertyChanged;
     protected void OnPropertyChanged([CallerMemberName] string prop = null)
     {
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
     }
    

现在发生的事情已经很清楚了。首先,正如评论中向我建议的那样,我需要检查画布的大小。添加了内部 ArrangeOverride

        canv.Width = arrangeBounds.Width;
        canv.Height = arrangeBounds.Height;

现在,当启动时,椭圆看起来像椭圆,而不是无形的东西。其次,我发现了自己的错误。对于 PathGeometry,我指定了所有坐标,但对于椭圆,仅指定了其中的一部分。显然编译器不明白,如果椭圆的 RadiusX = 50 和 RadiusY = 50,那么它的中心应该在点 50, 50 处。

        din_path.StartPoint = new Point(to_a, b);
        horiz_line.Point = new Point(a, b);
        fon_ellipse.Center = new Point(a, b);
        hole_ellipse.Center = new Point(a, b);

当然,这浪费了很多时间,这很遗憾,但我学到了替代方法。然后我肯定会尝试使用 ViewBox 和私有依赖属性的选项。我希望我的写作对某人有用。再次感谢所有回答我的人。 最后结果

c#
  • 1 个回答
  • 82 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5