プロパティが変更されたときに、アプリのメイン ウィンドウの背景色を変更したいと考えています。変更可能な営業日があり、予定から変更された場合にウィンドウの背景を変更したい。これを伝えるプロパティを設定しました。しかし、それ自体を変更するウィンドウにスタイル データトリガーを設定できますか? または、app.xaml でこれを行う必要がありますか?
質問する
18631 次
4 に答える
8
結局、ドリューが提案したことを実行しました。依存関係プロパティを使用しなかったことを除いて。
<Window.Resources>
<SolidColorBrush x:Key="windowBGBrush" Color="Green"/>
<SolidColorBrush x:Key="windowBGBrushBusinessDateChanged" Color="Red"/>
</Window.Resources>
<Window.Style >
<Style TargetType="{x:Type Window}">
<Setter Property="Background" Value="{DynamicResource windowBGBrush}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsBusinessDateChanged}" Value="true">
<Setter Property="Background" Value="{DynamicResource windowBGBrushBusinessDateChanged}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Style>
IsBusinessDateChanged
サービスによって設定されるビューモデルのプロパティです。なぜこれが大変だったのか分かりません。
于 2009-10-21T21:41:23.760 に答える
2
ウィンドウでカスタム プロパティを公開している場合は、それが DependencyProperty として定義されていることを確認するだけで、スタイルで通常のトリガーを使用してプロパティに反応できるはずです。そのようです:
<Window.Style>
<Style TargetType="{x:Type MyWindow}">
<Style.Triggers>
<Trigger Property="MyProperty" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>
于 2009-10-20T15:11:03.630 に答える
1
コンバーターアプローチによるソリューションは次のとおりです。
XAML:
<Window x:Class="StackOverflowTests.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" x:Name="window1" Width="300"
xmlns:local="clr-namespace:StackOverflowTests">
<Window.Resources>
<local:DateToColorConverter x:Key="DateToColorConverter" />
</Window.Resources>
<Window.Background>
<SolidColorBrush Color="{Binding ElementName=textBoxName, Path=Text, Converter={StaticResource DateToColorConverter}}" />
</Window.Background>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox x:Name="textBoxName" Margin="5"></TextBox>
</Grid>
</Window>
C#:
using System;
using System.Windows;
using System.Windows.Data;
using System.Windows.Media;
namespace StackOverflowTests
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
}
public class DateToColorConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
DateTime date;
if (DateTime.TryParse(value.ToString(), out date))
{
if (date == DateTime.Today)
return Colors.Green;
else
return Colors.Red;
}
else
{
return Colors.Gold;
}
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new System.NotImplementedException();
}
#endregion
}
}
于 2009-10-20T15:17:46.527 に答える
0
背景をプロパティにバインドする方が良いかもしれません。ウィンドウのデータソースをオブジェクトに設定する必要があり、valueconverter が必要になる場合があります。
于 2009-10-20T14:51:41.757 に答える