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