我们有很多控件包括:带有圆形边框的容器和几个调用save& amp;取消视图模型上的命令,如下所示:
<Border Background="White" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Opacity="1" Padding="5,5,5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
<StackPanel>
<!--Some Control Stuff Here...-->
<controls:SaveCancelButtons/>
</StackPanel>
</Border>
我想做的是制作一个自定义控件/样式/模板等,允许我重复使用它,这样我就可以将任何新用户控件包装在一组标签中,将其内容放入堆栈面板(其中评论在上面)
实现这一目标的最佳方法是什么?
编辑:
好的我现在有一个这样的模板:
<ControlTemplate x:Key="RoundedBordersTemplate">
<Border Background="White" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Opacity="1" Padding="5,5,5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
<StackPanel>
<ContentPresenter/>
<controls:SaveCancelButtons/>
</StackPanel>
</Border>
</ControlTemplate>
控件如下所示:
<ContentControl Template="{StaticResource RoundedBordersTemplate}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Description: " Width="72"/>
<TextBox Text="{Binding Path=Description}"
Width="205" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="Type:" Width="72" />
<ComboBox ItemsSource="{Binding Path=TypeList}"
DisplayMemberPath="Description"
SelectedValuePath="ID"
Width="205" />
</StackPanel>
</StackPanel>
</ContentControl>
但我只看到保存/取消按钮。
答案 0 :(得分:3)
我建议使用ControlTemplate
类型ContentControl
:
<ControlTemplate x:Key="RoundedBordersTemplate" TargetType="ContentControl">
<Border Background="White" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Opacity="1" Padding="5,5,5,5" VerticalAlignment="Center" HorizontalAlignment="Center">
<StackPanel>
<ContentPresenter />
<controls:SaveCancelButtons/>
</StackPanel>
</Border>
</ControlTemplate>
然后使用如下:
<ContentControl Template="{StaticResource RoundedBordersTemplate}">
<StackPanel>
<Button>Hello</Button>
<Button>World</Button>
</StackPanel>
</ContentControl>
给你:
更新:这样做的好处是不要求您将ContentControl子类化为仅查看更改
答案 1 :(得分:1)
您的控件应继承ContentControl(包含CONTENT的控件 - 即其他控件)。像所有正确的WPF控件一样,这个控件完全不可见 - 其他东西(按钮视觉外观)通过模板/样式机制添加。
然后,ContentControl的子类负责实际提供按钮的逻辑。