[英]Wpf styles and attached properties
我一直在玩行為,我遇到了一個有趣的問題。 這是我的行為:
public class AddNewBehavior : BaseBehavior<RadGridView, AddNewBehavior>
{
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(AddNewBehavior), new FrameworkPropertyMetadata(false, OnIsEnabledChanged));
public static void SetIsEnabled(DependencyObject obj, bool isEnabled)
{
obj.SetValue(IsEnabledProperty, isEnabled);
}
public static bool GetIsEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(IsEnabledProperty);
} ... OnIsEnabledChanged(...)}
當我設置這樣的樣式時,這將很有用:
<Style TargetType="telerikGridView:RadGridView">
<Setter Property="Behaviors:AddNewBehavior.IsEnabled" Value="true" />
</Style>
但是,如果我把它放在抽象類中
public abstract class BaseBehavior<TObj, TBehavior> : Behavior<TObj>
where TObj : DependencyObject
where TBehavior : BaseBehavior<TObj, TBehavior>, new()
{
public static readonly DependencyProperty IsEnabledProperty = DependencyProperty.RegisterAttached("IsEnabled", typeof(bool), typeof(TBehavior), new FrameworkPropertyMetadata(false, OnIsEnabledChanged));
public static void SetIsEnabled(DependencyObject obj, bool isEnabled)
{
obj.SetValue(IsEnabledProperty, isEnabled);
}
public static bool GetIsEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(IsEnabledProperty);
}
public static void OnIsEnabledChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e)
{
BehaviorCollection behaviorCollection = Interaction.GetBehaviors(dpo);
if ((bool)e.NewValue)
{
var firstOrDefault = behaviorCollection.Where(b => b.GetType() == typeof(TBehavior)).FirstOrDefault();
if (firstOrDefault == null)
{
behaviorCollection.Add(new TBehavior());
}
}
}
}
樣式聲明將粉碎為“值不能為空。屬性名稱:屬性”。
不知道我做錯了什么,在基類中使用IsEnabled代碼會很棒。
謝謝,
在基類的IsEnabledProperty定義中,嘗試將其更改為:
public static readonly DependencyProperty IsEnabledProperty =
DependencyProperty.RegisterAttached(
"IsEnabled",
typeof(bool),
typeof(BaseBehavior<TObj, TBehavior>),
new FrameworkPropertyMetadata(false, OnIsEnabledChanged)
);
也就是說,不是將TBehavior
作為DP OwnerType傳遞, BaseBehavior<TObj, TBehavior>
傳入BaseBehavior<TObj, TBehavior>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.