2017-01-04 4 views
0

UIが2つの状態(狭いと広い)を持つテキストエディタで作業しています。boolプロパティの値がtrueに変更されたときにVisualStateをトリガーします(falseに変更すると無視します)

Narrowは主に、< 720px以下のウィンドウサイズに使用されることを意図しています。一つだけのファイルのオープンがある場合しかし、加えて、私は狭いUIの状態は、ウィンドウのサイズに関係なく(すなわち、それはだ場合でも、> = 720ピクセル)を使用することにしたいです。

は、私は複数のファイルのオープンが存在するか否かについて記録を保持するboolプロパティました:

private bool _moreThan1FileOpen = false; 
    public bool MoreThan1FileOpen 
    { 
     get { return _moreThan1FileOpen; } 
     set 
     { 
      _moreThan1FileOpen = value; 
     } 
    } 

をしかし、私は、このプロパティのにリンクするvisualSTATEのトリガーを結ぶ任意の成功を収めていませんしました値がtrueの場合はこの状態に、falseの場合は次のVisualStateに移動します。

私はVisualState.StateTriggersを経由してこれを実現する方法上の任意のガイダンスはあまり理解されるであろう。

-

dotMortenによってadvicedとして、私はPropertyChangedイベントを高めるためにプロパティのセッターを変更しても、int型のプロパティにしました:理想的には

private bool _numFilesOpen = 0; 
public bool NumFilesOpen 
{ 
    get { return _numFilesOpen; } 
    set 
    { 
     _numFilesOpen = value; 
     RaisePropertyChanged("NumFilesOpen"); 
    } 
} 

、私はそれがで作業していると思います2つの状態:

 <VisualState x:Name="WideState"> 
      <VisualState.StateTriggers> 
       <triggers:CompositeStateTrigger Operator="And"> 
        <triggers:CompareStateTrigger Value="{Binding NumFilesOpen}" CompareTo="1" Comparison="GreaterThan" /> 
        <triggers:CompareStateTrigger Value="{Binding WindowWidth}" CompareTo="719" Comparison="GreaterThan" /> 
</VisualState.StateTriggers> 

     <VisualState x:Name="NarrowState"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="0" /> 
      </VisualState.StateTriggers> 

しかし、複合状態トリガーが動作していないようです、と私は3つの状態になってしまった:

 <VisualState x:Name="NarrowStatee"> 
      <VisualState.StateTriggers> 
       <triggers:CompareStateTrigger Value="{Binding NumFilesOpen}" CompareTo="2" Comparison="LessThan" /> 
      </VisualState.StateTriggers> 

     <VisualState x:Name="WideState"> 
      <VisualState.StateTriggers> 
       <AdaptiveTrigger MinWindowWidth="720" /> 
      </VisualState.StateTriggers> 

    <VisualState x:Name="NarrowState"> 
     <VisualState.StateTriggers> 
      <AdaptiveTrigger MinWindowWidth="0" /> 
     </VisualState.StateTriggers> 

答えて

0

セッターは、そのプロパティのPropertyChangedイベントを発生させる必要があります。そうしないと、状態トリガーは再バインドを認識しません。

つまり、インターフェイスでINotifyPropertyChangedを実装し、次にセッター呼び出しで PropertyChanged?.Invoke(this、new PropertyChangedEventArgs(nameof(MoreThan1FileOpen)));を呼び出します。

+0

更新と私のオリジナルのポストを編集。 – Bredcrumbs

+0

実際には、私はintとboolを比較していることに気付きました!最初にそれを並べ替えてみましょう.. – Bredcrumbs

+0

もう一度やり直してください。 – Bredcrumbs

関連する問題