gpt4 book ai didi

silverlight - 将转换器与 DependencyProperty 结合使用

转载 作者:行者123 更新时间:2023-12-02 00:29:55 25 4
gpt4 key购买 nike

我在派生的 AutoCompleteBox 控件上创建了一个 DependencyProperty --> IsReadOnly

从那里开始,我尝试通过转换器设置值 (T/F)。基于转换器值,我想在 DependencyProperty 的 setter 中更新嵌套的 TextBox 样式。在 XAML 中显式设置属性 (IsReadOnly="True") 效果很好, setter 会触发并更新样式。但是,通过转换器执行此操作不会触发 DependencyProperty 的 setter 。我似乎无法在此处粘贴代码片段(第一次张贴者)..所以我会尽我所能快速运行代码:

AutoCompleteBox 上的属性:

IsReadOnly="{Binding Converter={StaticResource IsReadOnlyVerifier}, ConverterParameter='Edit Client'}"

调用转换器,转换器根据用户的权限返回 true 或 false。但是,这不会调用已注册的 DependencyProperty 的 setter 。

.. 设置

        {
if (value)
{
var style = StyleController.FindResource("ReadOnlyTextBox") as Style;
TextBoxStyle = style;
}
else
{
TextBoxStyle = null;
}
SetValue(IsReadOnlyProperty, value);
}

最佳答案

这是一个典型的新手陷阱。绑定(bind)将直接使用 SetValue 设置目标 DependencyProperty,它们不会通过 POCO 属性 setter 方法分配值。

您的 IsReadOnly 属性应如下所示:-

  #region public bool IsReadOnly
public bool IsReadOnly
{
get { return (bool)GetValue(IsReadOnlyProperty); }
set { SetValue(IsReadOnlyProperty, value); }
}

public static readonly DependencyProperty IsReadOnlyProperty =
DependencyProperty.Register(
"IsReadOnly",
typeof(bool),
typeof(MyAutoCompleteBox),
new PropertyMetaData(false, OnIsReadOnlyPropertyChanged) );

private static void OnIsReadOnlyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MyAutoCompleteBox source = d as MyAutoCompleteBox;
source.OnIsReadOnlyChanged((bool)e.OldValue, (bool)e.NewValue);
}

private void OnIsReadOnlyChanged(bool oldValue, bool newValue)
{
TextBoxStyle = newValue ? StyleControlller.FindResource("ReadOnlyTextBox") as Style ? null;
}
#endregion

它会影响设置依赖项属性时的任何其他更改,您应该在注册 DependencyProperty 时向 PropertyMetaData 提供 PropertyChangedCallback 委托(delegate)。每当 SetValue 用于为此属性分配值时,都会调用它。

关于silverlight - 将转换器与 DependencyProperty 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7423920/

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