2017-11-16 11 views
-1

WPFとMVVMが新しく、標準Windowのすべての機能を持つカスタムWindowChromeを作成しようとしています。私は、最大化/ウィンドウButtonコンテンツを最小化に苦しんだ:私はダブルクリックするとC#WPF - 別のコントロールイベントが発生したときにコントロールの内容を変更します。

enter image description here

:私は右のアイコンを表示するために、ときに、ユーザーがダブルクリックWindowChromeバー、内容を変更したいですバーは、結果は次のようになります。

enter image description here

私はボタンTriggersとの内容を変更するために管理しますが、他の制御イベントが発生したときにどのように私はそれを変更できますか?

ありがとうございました!

+0

別の制御イベントを言うときには必ずしも確実ではありません。しかし、一般的なイベント処理のためのWPFでは、コマンド(保存、切り取り、コピー、貼り付けなど)を使用して通常実装されます。 (https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/commanding-overview) – Viju

+0

私は、ウィンドウの 'WindowState'プロパティでトリガーしたいと思っています。これは状態であり、イベントではありません。疑問は、もちろん、どのようにこれを実装しているかです。私はそれについて何のヒントも見ません。 –

+0

@Vijuこの場合、ウィンドウのトップバーがDoubleClickedの場合、最大化ボタンの内容は変更する必要があります。 – Belfed

答えて

1

Window.WindowStateの値に基づいてコンテンツを設定するトリガーを使用して、ボタンにスタイルを与えます。これはイベントではありません。このボタンは、ウィンドウの現在の状態を反映します。

<Style TargetType="Button"> 
    <Style.Triggers> 
     <DataTrigger 
      Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
      Value="Maximized"> 
      <Setter Property="Content"> 
       <Setter.Value> 
        <!-- I don't know if you're using a Path or what --> 
        <Path Stroke="White" Data="..." /> 
       </Setter.Value> 
      </Setter> 
     </DataTrigger> 
     <DataTrigger 
      Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
      Value="Normal"> 
      <Setter Property="Content"> 
       <Setter.Value> 
        <!-- I don't know if you're using a Path or what --> 
        <Path Stroke="White" Data="..." /> 
       </Setter.Value> 
      </Setter> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

それらのパスのそれぞれのコピーは1つだけありますので、代わりにボタンのテンプレートを設定する方が賢明だろう、とあなたが二回スタイルを再利用した場合、彼らが共有することはできません。

これがあなたのコードではうまくいかない理由がある場合は、あなたのコードを見せてください。

+1

これは私が探していたものです。別のタイプのプロパティを参照するプロパティを設定する方法です。私はまだWPFの方がはるかに多く作業しなければならないと思います...ウィンドウの状態を変更する可能性があるすべてのイベントを実装してボタンのコンテンツを設定しようとしていました。助けてくれてありがとう! – Belfed

+0

@ Belfed喜んで助けてください。 WPFでは、コントロールの視覚的な状態を管理するのにイベントをあまり使用しません。あなたが興味を持っている*状態*を示すプロパティを常に探します。ボタンには 'IsPressed'などがあり、トリガーを書き込みます。 'VisualStateManager.VisualStateGroups'はあなたが見ることのできる別のものですが、この時点でそこに行く必要はありません。 –

関連する問題