2011-07-07 12 views
2

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"); 
      } 
     } 
    } 
} 

答えて

2

dependency property value precedenceを見てください、そしてどのように異なる場所から値を変更し、スタイル、トリガ、アニメーションなど。 共に働く。

バインディングモード= TwoWayに追加すると動作するはずです。

関連する問題