これを行うには、Foreground プロパティのバインディングのソースを指定する必要があります。これはさまざまな方法で実行できますが、その 1 つの例は、Settings クラスをリソースとして公開することです。
例えば:
<Grid x:Name="LayoutRoot">
<Grid.Resources>
<!-- If you want to use SettingsFile as a static, you might want to expose an accessor/wrapper class for it here instead. -->
<settings:SettingsFile x:Name="SettingsFileResource" />
</Grid.Resources>
<ListBox ItemsSource="{Binding MyItems}">
<ListBox.ItemTemplate>
<DataTemplate x:Key="ArticleItemTemplateClassic">
<Grid>
<!-- ... -->
<TextBlock Text="{Binding Description}"
<!-- Now change your Binding Path to the target property, and set the source to the resource defined above. -->
Foreground="{Binding BlackBackgroundEnabled, Source={StaticResource SettingsFileResource}, Converter={StaticResource InverseBackgroundColorConverter}}"/>
<StackPanel />
<!-- ... -->
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
代わりに、代わりに AttachedProperty を使用する方がクリーンな場合があります。例えば:
public static bool GetBlackBackgroundEnabled(DependencyObject obj)
{
return (bool)obj.GetValue(BlackBackgroundEnabledProperty);
}
public static void SetBlackBackgroundEnabled(DependencyObject obj, bool value)
{
obj.SetValue(BlackBackgroundEnabledProperty, value);
}
// Using a DependencyProperty as the backing store for BlackBackgroundEnabled. This enables animation, styling, binding, etc...
public static readonly DependencyProperty BlackBackgroundEnabledProperty =
DependencyProperty.RegisterAttached("BlackBackgroundEnabled", typeof(bool), typeof(Control), new PropertyMetadata(false, (s, e) =>
{
Control target = s as Control;
SolidColorBrush brush = new SolidColorBrush();
// Logic to determine the color goes here
if (GetBlackBackgroundEnabled(target))
{
brush.Color = something;
}
else
{
brush.Color = somethingElse;
}
target.Foreground = brush;
}));
次に、次のように使用します。
<TextBlock settings:SettingsFile.BlackBackgroundEnabled="True" />