我有實現自定義的DependencyObject問題:轉換器依賴屬性
我需要一個轉換器設置或綁定屬性中清除一個枚舉標誌。因此,我用兩個DependencyProperties創建了一個從FrameworkElement中刪除的IValueConverter:標誌(由轉換器設置/未設置的標誌)和標誌(要修改的值/屬性)。父級UserControl(Name = EnumerationEditor)提供了轉換器綁定到的屬性。
ListBox生成CheckBoxes和用於通過DataTemplate修改屬性的轉換器實例。每個CheckBox/converter實例都用於一個標誌。我用下面的XAML代碼:
<ListBox Name="Values" SelectionMode="Extended" BorderThickness="1" BorderBrush="Black" Padding="5">
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type system:Enum}">
<DataTemplate.Resources>
<Label x:Key="myTestResource" x:Shared="False"
Content="{Binding}"
ToolTip="{Binding Path=Value, ElementName=EnumerationEditor}"
Foreground="{Binding Path=Background, ElementName=EnumerationEditor}"
Background="{Binding Path=Foreground, ElementName=EnumerationEditor}"/>
<converters:EnumerationConverter x:Key="EnumerationConverter" x:Shared="False"
Flag="{Binding}"
Flags="{Binding Path=Value, ElementName=EnumerationEditor}"/>
</DataTemplate.Resources>
<StackPanel Orientation="Horizontal">
<CheckBox Content="{Binding}" IsChecked="{Binding Path=Value, ElementName=EnumerationEditor, Converter={StaticResource EnumerationConverter}}"/>
<ContentPresenter Content="{StaticResource myTestResource}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
奇怪的:標籤工作正常 - 但轉換器不能。我得到的錯誤:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=EnumerationEditor'. BindingExpression:Path=Value; DataItem=null; target element is 'EnumerationConverter' (Name=''); target property is 'Flags' (type 'Enum')
我不明白爲什麼,結合基本相同......
這裏是轉換器的代碼:
public class EnumerationConverter : FrameworkElement, IValueConverter
{
#region IValueConverter
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return false;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return Parity.Space;
}
#endregion
#region public Enum Flag { get; set; }
public Enum Flag
{
get { return (Enum)this.GetValue(EnumerationConverter.FlagProperty); }
set { this.SetValue(EnumerationConverter.FlagProperty, value); }
}
/// <summary>
/// Dependency property for Flag.
/// </summary>
public static readonly DependencyProperty FlagProperty = DependencyProperty.Register("Flag", typeof(Enum), typeof(EnumerationConverter));
#endregion
#region public Enum Flags { get; set; }
public Enum Flags
{
get { return (Enum)this.GetValue(EnumerationConverter.FlagsProperty); }
set { this.SetValue(EnumerationConverter.FlagsProperty, value); }
}
/// <summary>
/// Dependency property for Flags.
/// </summary>
public static readonly DependencyProperty FlagsProperty = DependencyProperty.Register("Flags", typeof(Enum), typeof(EnumerationConverter));
#endregion
}
是你的用戶控件的EnumerationEditor部分,你只發布了列表框 – anivas
@anivas:是的,它是UserControl本身。它有一個依賴性屬性,稱爲類型枚舉的值。但正如您在代碼片段中看到的,我使用與Converter.ToolTip完全相同的綁定。 Label.ToolTip的工作原理 - 它顯示正確的值。但轉換器會產生錯誤。 – Korexio
轉換器不會成爲視覺樹的一部分,這就是爲什麼它找不到它。你想做什麼? – anivas