c# - 如何使用另一个依赖属性作为后备值
问题描述
我正在创建一个用户控件,它是一个带有图像的切换按钮。当检查切换按钮以及未选中切换按钮时,我具有单独的依赖关系属性。
xml:
<ToggleButton IsChecked="{Binding Checked, Mode=TwoWay}">
<Image>
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{Binding CheckedImage}"></Setter>
<DataTrigger Binding="{Binding IsChecked}" Value="False">
<Setter Property="Source" Value="{Binding UncheckedImage}"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</ToggleButton>
后面的代码:
public partial class ImageToggleButton : UserControl
{
public ImageToggleButton()
{
InitializeComponent();
this.DataContext = this;
}
public bool Checked
{
get { return (bool)GetValue(IsCheckedProperty); }
set { SetValue(IsCheckedProperty, value); }
}
// Using a DependencyProperty as the backing store for IsChecked. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsCheckedProperty =
DependencyProperty.Register("Checked", typeof(bool), typeof(ImageToggleButton), null);
public ImageSource CheckedImage
{
get { return (ImageSource)base.GetValue(TrueStateImageProperty); }
set { base.SetValue(TrueStateImageProperty, value); }
}
// Using a DependencyProperty as the backing store for TrueStateImage. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TrueStateImageProperty =
DependencyProperty.Register("CheckedImage", typeof(ImageSource), typeof(ImageToggleButton), null);
public ImageSource UncheckedImage
{
get { return (ImageSource)base.GetValue(FalseStateImageProperty); }
set { base.SetValue(FalseStateImageProperty, value); }
}
// Using a DependencyProperty as the backing store for FalseStateImage. This enables animation, styling, binding, etc...
public static readonly DependencyProperty FalseStateImageProperty =
DependencyProperty.Register("UncheckedImage", typeof(ImageSource), typeof(ImageToggleButton), null);
}
主窗口:
<ImageToggleButton Checked="{Binding IsPlaying}" CheckedImage="{DynamicResource PauseIcon}" UncheckedImage="{DynamicResource PlayIcon}">
</ImageToggleButton>
是否可以使用 CheckedImage 作为默认图像,这样如果我没有提供 UncheckedImage,那么在选中和未选中状态下都会显示 CheckedImage?
解决方案
您可以为设置另一个值PropertyChangedCallback
的CheckedImage
属性注册一个:
public static readonly DependencyProperty TrueStateImageProperty =
DependencyProperty.Register("CheckedImage", typeof(ImageSource), typeof(ImageToggleButton),
new PropertyMetadata(new PropertyChangedCallback(OnPropChanged)));
private static void OnPropChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ImageToggleButton tb = (ImageToggleButton)d;
if (tb.UncheckedImage == null)
tb.UncheckedImage = (ImageSource)e.NewValue;
}
顺便说一句,您应该遵循依赖项属性命名约定:https ://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/custom-dependency-properties
推荐阅读
- html - Wordpress:如何更改站点标题旁边的站点徽标?
- c# - C# ExcelDataReader 错误 - XLSB 格式的“文件签名无效”
- java - 什么是应用程序的顶部栏以及如何更改其颜色?
- sql-server - 没有现有数据库的 SQL 数据库项目
- pandas - 如何在熊猫中输出“名称”值?
- elasticsearch - 如何通过 PySpark 将带有结构列的数据框写入 Elasticsearch
- jquery - 嗨,当我从第 11 行循环遍历 Datatable 分页表时,我在 Jquery 中遇到问题,它没有循环
- java - 如果我直接添加答案,为什么我的列表功能在这个问题中不起作用,但如果我创建列表的副本则起作用
- node.js - 如何在 mongodb 中获取图形的条件平均数据?
- reactjs - React 创建一个水平分隔线,中间有文本