我已經創建了一個附加屬性來設置基於特定枚舉值的UIElement的可見性。這工作正常。但是,我需要擴展這一點,以便根據發件人的「狀態」覆蓋可見性。WPF - 附屬性需要引用另一個綁定附加屬性
我該如何做到這一點?我曾想過我可以創建另一個附屬屬性,第一個附屬屬性可以引用,但是我需要能夠將值綁定到第二個附加屬性,而不是隻設置爲枚舉值。
編輯
下面是我的問題的一個例子:使用複選框只是控制
<Window x:Class="AttachedProperty.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:attachedProperty="clr-namespace:AttachedProperty"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<TextBlock Text="Button should be enabled?"/>
<CheckBox IsChecked="{Binding Path=CanClick}"/>
<Button Content="Click Me" IsEnabled="{Binding Path=CanClick}"/>
<Button Content="Manager Only Click" attachedProperty:SecurityBehavior.IsEnabledRole="Mgr"/>
</StackPanel>
</Grid>
的第一個按鈕的enabled屬性。第一,因爲該複選框被選中,第二,因爲我是一個 -
public class SecurityBehavior
{
public static readonly DependencyProperty IsEnabledRoleProperty = DependencyProperty.RegisterAttached(
"IsEnabledRole", typeof (string), typeof (SecurityBehavior), new UIPropertyMetadata(OnIsEnabledRoleChanged));
private static void OnIsEnabledRoleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
// In here have some logic that determines if the current user is authorised
// Principal.IsInRole(e.NewValue.ToString() ? true : false;
sender.SetValue(UIElement.IsEnabledProperty, true);
}
public static void SetIsEnabledRole(DependencyObject element, string value)
{
element.SetValue(IsEnabledRoleProperty, value);
}
public static string GetIsEnabledRole(DependencyObject element)
{
return (string) element.GetValue(IsEnabledRoleProperty);
}
}
當運行這兩個按鈕被激活: 第二個按鈕的enabled屬性被確定,如果你是正確的安全組中的attachedProperty控制經理。當我取消選中複選框時,第一個按鈕處於禁用狀態,我希望我的附加屬性僅在安全組和中的複選框處於選中狀態時才能啓用。
如何通過樣本進行更改,以便我可以獲得基於2個可能輸入設置IsEnabled的行爲?
按照你的建議我可以用一個轉換器,但會有很多不同的地方,這將需要,雖然轉換器會工作,我認爲這將使XAML更清潔,如果功能可能被包裹在一個附加的屬性/附加行爲 –
我不知道我更喜歡儘可能保持在xaml UI相關的東西儘可能。如果你想減少複製或者讓自定義DP保持枚舉值,如果你想進一步降低複製值,你總是可以定義一個基類'Style'並在那裏分配屬性。只是沒有吸引到這些東西附加屬性。這就是爲什麼我們將Binding和MultiBinding和轉換器放在第一位:) – Viv
@DavidWard我已經編輯了我的答案,並給出了您正在尋找的附加屬性的答案。請考慮其他選項:) – Viv