TextBlocks
私はそれらのうちのいくつかが入っているものとそうでないものの2セットを持ってItemControl
います.
先祖TextBlock
がItemControl
.
次のコードを使用してそれを行うことができますが、私の問題は、ログ (および出力ウィンドウ) にデータ ビディング エラー メッセージが表示されることTextBlocks
ですItemControl
。
このタスクを実行し、このエラー メッセージを回避するためのより良い方法はありますか?
<Grid>
<Grid.Resources>
<local:HasAncestorConverter x:Key="HasAncestorConverter" />
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={RelativeSource
AncestorType={x:Type ItemsControl}},
Converter={StaticResource HasAncestorConverter}}" Value="True">
<Setter Property="Background"
Value="{Binding Tag,
RelativeSource={RelativeSource
AncestorType={x:Type ItemsControl}}}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<StackPanel>
<TextBlock Text="Out of ItemControl" />
<ItemsControl Tag="Blue" >
<TextBlock Text="Inside of ItemControl" />
</ItemsControl>
</StackPanel>
</Grid>
コンバーター:
class HasAncestorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
エラーメッセージ:
System.Windows.Data エラー: 4 : 参照 'RelativeSource FindAncestor、AncestorType='System.Windows.Controls.ItemsControl'、AncestorLevel='1'' でバインディングのソースが見つかりません。バインディング式:パス=; DataItem=null; ターゲット要素は 'TextBlock' (Name='') です。ターゲット プロパティは 'NoTarget' (タイプ 'Object') です