c# – 如何在自定义模板中使用自定义属性?
作者:互联网
假设想要创建一个左侧有一个小椭圆的自定义按钮.
我希望这个椭圆的颜色是数据可绑定的.
所以我启动Blend并在表面上放置一个按钮并编辑模板的副本.
我现在拥有自定义模板,并在其中放入一个小椭圆:
…
<Border x:Name="Background" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="White" CornerRadius="3">
<Grid Background="{TemplateBinding Background}" Margin="1">
<snip />
<!-- My ellipse here -->
<Ellipse x:Name="ellipse" Width="10" Height="10" HorizontalAlignment="Left" />
</Grid>
</Border>
…
我右键单击此按钮并选择Make into UserControl,命名为MyButton.
在这个按钮后面的代码中,我为theBrush`添加了一个自定义依赖项属性:
public Brush MyColor
{
get { return (Brush)GetValue(MyColorProperty); }
set { SetValue(MyColorProperty, value); }
}
public static readonly DependencyProperty MyColorProperty = DependencyProperty.Register("MyColor", typeof(Brush), typeof(MyButton), new PropertyMetadata(new opertyChangedCallback(MyColorPropertyChanged)));
private static void MyColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var thisControl = d as MyButton;
}
然后我可以使用我的自定义按钮:
<local:MyButton Width="130" MyColor="Red"/>
但后来我被卡住了.如何将我的椭圆颜色(上面的x:Name =“ellipse”)绑定到MyColor属性?
编辑:所以我使用Fill = {TemplateBinding MyColor}绑定用户控件中的Fill属性,但后来我在类型Button中找不到属性MyColor.
好的,所以我需要将我的模板定位到自定义MyButton类型,但我该怎么做呢?
我可以简单地将Button更改为MyButton,因为我在’MyButton’类型中找不到Property’ContentTemplate’
<UserControl
<snip/>
x:Class="SilverlightApplication1.MyButton">
<UserControl.Resources>
<Style x:Key="ButtonStyle1" TargetType="Button">
<snip/>
</Style>
</UserControl.Resources>
<Grid x:Name="LayoutRoot">
<Button Content="Test Button" Style="{StaticResource ButtonStyle1}"/>
</Grid>
</UserControl>
解决方法:
这里的问题是UserControl不是您控制的正确基础.你应该创建一个模板控件.
在Visual Studio中,将新的“Silverlight模板化控件”添加到名为MyButton的项目中.
打开MyButton.cs并将其基类更改为Button.将MyColor依赖项属性放入代码中.
打开Themes / Generic.xaml并找到为此新MyButton控件放置的默认样式.用模板替换该样式中的模板.现在,模板中的Fill =“{TemplateBinding MyColor}”将起作用.
标签:c,xaml,silverlight,wpf-controls 来源: https://codeday.me/bug/20190704/1379056.html