DataTriggerを使用してコントロールのIsEnabledプロパティを操作するときに問題が発生します。通常、それは正常に動作しますが、ViewのInitializedイベント内でIsEnabled状態を初期化すると、ダイナミックスタイリングが機能しなくなります。Wpf:コードブレイクの後ろにコードを設定するスタイルトリガー
ここに私のコードです。私はできるだけ簡単な例にそれを整えた。
なぜこのようなことが起こりますか?スタイルトリガーとコードビハインドでイニシャライズの両方でIsEnabledを設定できるようにするにはどうすればよいですか?
ありがとうございます!
ビュー:
(チェックボックスの値に応じて有効/無効にする必要があるテキストボックスが含まれています)
<Window x:Class="IsEnabled.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Initialized="Window_Initialized">
<StackPanel Orientation="Vertical">
<TextBox x:Name="txtTarget" Width="200">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=ToggleValue}" Value="True">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<CheckBox x:Name="chkSource" IsChecked="{Binding Path=ToggleValue}" />
</StackPanel>
</Window>
ビュー分離コード:
(追加のみIsEnabledの初期状態を設定するInitializedイベントの実装です)
using System;
using System.Windows;
namespace IsEnabled.Views
{
public partial class MainView : Window
{
public MainView()
{
InitializeComponent();
}
private void Window_Initialized(object sender, EventArgs e)
{
txtTarget.IsEnabled = false;
}
}
}
のViewModel:
(ViewModelBaseがINotifyPropertyChangedインターフェイスの実装を保持している)
using System;
namespace IsEnabled.ViewModels
{
class MainViewModel : ViewModelBase
{
private bool _ToggleValue;
public bool ToggleValue
{
get { return _ToggleValue; }
set
{
_ToggleValue = value;
OnPropertyChanged(this, "ToggleValue");
}
}
}
}