c# - 如何定义查看属性值的样式
问题描述
因此,我为切换按钮定义了样式,该样式在按下切换按钮时设置背景颜色。
<Style x:Key="ToggleStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border CornerRadius="10" Margin="5,5,5,5" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1"
Background="{TemplateBinding Background}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
</Style.Triggers>
</Style>
这可行,但我真正想做的是让这种样式设置不同的颜色,基于我可以在 XAML 中为切换按钮定义的属性。
这甚至可能吗?如果是这样,如何去做呢?
- 所以在下面采取了 Eric 的回答并且它起作用了,但现在我发现自己想要在每个实例的基础上修改背景和前景。
我尝试了以下方法:
public static class ToggleButtonAttach
{
private static readonly DependencyProperty CheckedBackgroundProperty = DependencyProperty.RegisterAttached("CheckedBackground", typeof(Brush), typeof(ToggleButtonAttach));
public static void SetCheckedBackground(ToggleButton target, Brush value) => target.SetValue(CheckedBackgroundProperty, value);
public static Brush GetCheckedBackground(ToggleButton target) => (Brush)target.GetValue(CheckedBackgroundProperty);
private static readonly DependencyProperty CheckedForegroundProperty = DependencyProperty.RegisterAttached("CheckedForeground", typeof(Brush), typeof(ToggleButtonAttach));
public static void SetCheckedForeground(ToggleButton target, Brush value) => target.SetValue(CheckedForegroundProperty, value);
public static Brush GetCheckedForeground(ToggleButton target) => (Brush)target.GetValue(CheckedForegroundProperty);
}
<Style x:Key="ToggleStyle" TargetType="{x:Type ToggleButton}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ToggleButton">
<Border x:Name="border" Focusable="False" CornerRadius="10" Margin="5,5,5,5" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1"
Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="toggleButtonContentPresenter" TextElement.Foreground="{TemplateBinding Foreground}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="TextElement.Foreground" TargetName="toggleButtonContentPresenter" Value="{Binding Path=(piapp:ToggleButtonAttach.CheckedForeground), RelativeSource={RelativeSource TemplatedParent}}"/>
<Setter TargetName="border" Property="Background" Value="{Binding Path=(piapp:ToggleButtonAttach.CheckedBackground), RelativeSource={RelativeSource TemplatedParent}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
但我收到以下错误:“成员“CheckedForeground”无法识别或无法访问。
显然出了点问题,但我没有看到。
解决方案
听起来您想要一个带有附加依赖属性的自定义控件。来自文章:
public static readonly DependencyProperty IsSpinningProperty =
DependencyProperty.Register(
"IsSpinning", typeof(Boolean),
typeof(MyCode)
);
public bool IsSpinning
{
get { return (bool)GetValue(IsSpinningProperty); }
set { SetValue(IsSpinningProperty, value); }
}
然后,您的控件模板可以将各种元素及其颜色属性绑定到您各自的依赖项属性。
推荐阅读
- sql - PostgreSQL CROSS JOIN 查询问题
- dax - DAX 取消衡量标准(取消日期与预订日期)
- node.js - 在执行函数之前进行渲染
- spring-boot - 使用 SpringBoot 实现 Jackson 实现:获取请求中存在的字段名称以及相应的字段映射
- django - 如何在 Svelte 组件中传递 Jinja 变量(Django/Flask)
- reactjs - 连接 Next.js CSR React 应用程序、Django 和 PostgreSQL 的最佳方式
- python - 我试图通过 django 发送邮件,但失败了。我没有收到任何错误。但是页面重定向到具有不同 URL 的同一页面
- android - 使用 livedata 协程不会被执行
- php - 将二进制数据中的大文件从 API 转发到客户端
- c - 如果只有一次迭代,gcc 优化会删除 for 循环吗?