Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件而不是按钮_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 用户控件而不是按钮

C# 用户控件而不是按钮,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个StackPanel,上面有几个包含图像的按钮。 到目前为止,它工作得很好,但我的问题是,它是否值得为按钮创建一个用户控件,还是应该像StackPanel一样使用它 <StackPanel> <Button> <Image> ... </Image> </Button> <Button> <Image> ... </Image> <

我有一个StackPanel,上面有几个包含图像的按钮。 到目前为止,它工作得很好,但我的问题是,它是否值得为按钮创建一个用户控件,还是应该像StackPanel一样使用它

<StackPanel>
<Button>
    <Image>
      ...
    </Image>
</Button>
<Button>
    <Image>
       ...
    </Image>
</Button>
<Button>
    <Image>
      ...
    </Image>
</Button>

...
...
...
建议的用户控件应为:

<Grid DataContext="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControlToolButton}}}">
<Button x:Name="ButtonBase" Command="{Binding Click}" ToolTip="{Binding ToolTip}" Style="{StaticResource ButtonStyle}">
    <Image x:Name="ImageButton" RenderOptions.BitmapScalingMode="HighQuality">
        <Image.Style>
            <Style TargetType="{x:Type Image}">
                <Setter Property="Source" Value="{Binding SourceBase}"/>
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Source" Value="{Binding SourceMouseOver, TargetNullValue=SourceBase}"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Image.Style>
    </Image>
</Button>

如果使用带有
项模板的,则可以在不使用
用户控件的情况下内联定义
按钮
,或者重复以下操作:

<ItemsControl ItemsSource="...">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Button ...>
                <Image ...>
                    <Image.Style>
                        ...
                    </Image.Style>
                </Image>
            </Button>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

...

如果没有,您可能应该创建一个
UserControl
,以避免重复定义相同的标记。或者是
风格

老实说,我不认为这里需要用户控件。。。有了适当的样式/模板,您想要做的事情可以轻松实现,并且比用户控件更简洁。如果要设置StackPanel中所有按钮的样式,可以通过在StackPanel的资源中添加样式来实现。或者通过将所有按钮的样式添加到App.xaml的文件中来实现。是。。。但是,如果希望StackPanel子级的所有按钮都具有该样式,则可以继承app.xaml中的按钮样式。这样你就不必明确定义每个按钮的样式了。实际上,我为所有按钮创建了一个样式,并将其添加到App.xaml文件中