gpt4 book ai didi

wpf - 使用 XAML 为 UserControl 中的所有元素添加前景色 setter

转载 作者:行者123 更新时间:2023-12-03 22:56:32 24 4
gpt4 key购买 nike

我的 UserControl 包含许多标签。在 XAML 中,我想定义一个 setter ,允许客户端一次为所有这些设置前台。

源代码:(简化)

在 Page.Resources 下:

<DataTemplate x:Key="customItemTemplate">
<StackPanel Orientation="Horizontal">
<MyControlLib:XYControl Unit="{Binding XYUnit}"/>
<TextBlock Text="{Binding XYMultiplier}" Width="16"/>
</StackPanel>
</DataTemplate>

在页面内容中:
<ListBox x:Name="XYZList" ItemTemplate="{StaticResource customItemTemplate}">
<!-- Set Foreground to "Red" for all items -->
<!-- For XYControl this is the TextForeground property -->
<!-- For TextBlock this is (naturally) the Foreground property -->
</ListBox>

(阅读 XAML 评论以了解我想要实现的 WPF 伟大)

当然, customItemTemplate在页面中不止一处使用,颜色不同。

在 WPF 中可以多么简单!

最佳答案

如果您希望 UserControl 的用户能够在外部设置该值,您可以定义一个新的 DependencyProperty , 然后可以在控件的任何实例上设置。

public static readonly DependencyProperty LabelForegroundProperty = DependencyProperty.Register(
"LabelForeground",
typeof(Brush),
typeof(MyUserControl),
new UIPropertyMetadata(Brushes.Black));

public Brush LabelForeground
{
get { return (Brush)GetValue(LabelForegroundProperty); }
set { SetValue(LabelForegroundProperty, value); }
}

然后,您可以在 UserControl 中为 Label 创建一个默认样式,该样式绑定(bind)到该值:
<UserControl.Resources>
<Style TargetType="{x:Type Label}">
<Setter Property="Foreground" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MyUserControl}}, Path=LabelForeground}" />
</Style>
</UserControl.Resources>

然后,控件的任何实例都可以设置自己的值,该值将应用于自己的标签:
<MyUserControl LabelForeground="Red"/>

关于wpf - 使用 XAML 为 UserControl 中的所有元素添加前景色 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com