2017-12-20 34 views
0

私はいくつかの機能を追加するためにWindowを拡張しましたが、これは特定のウィンドウサイズを指定したり、コンテンツのサイズを変更できる機能です。コードビハインドは、現在MVVM化されていない、このように見えます。WPF DataTriggerの設定者がウィンドウの幅と高さを変更しない

public partial class DialogWindow : Window 
{ 
    public bool HasSize { get; set; } 

    public Size Size { get; set; } 
} 

XAMLは、その後、次のようになります。コンテンツにサイズ変更

<Window ... Name="DialogWindowElement"> 
    <Window.Style> 
     <Style TargetType="Window"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding HasSize, ElementName=DialogWindowElement}" Value="True"> 
        <Setter Property="Width" Value="{Binding Size.Width, ElementName=DialogWindowElement}" /> 
        <Setter Property="Height" Value="{Binding Size.Height, ElementName=DialogWindowElement}" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding HasSize, ElementName=DialogWindowElement}" Value="False"> 
        <Setter Property="SizeToContent" Value="WidthAndHeight" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Style> 
    <ContentControl ...> 
     <!-- Content control using DataTemplates to determine content --> 
    </ContentControl> 
</Window> 

は大丈夫動作するようだが、指定された幅と高さは適用されません。大規模なコンテンツは、制限されずに後でサイズ変更可能ではなく、必要なすべてのサイズに展開されます。

スヌープなどのツールはトリガーが発生することを意味しますが、セッターは効果がないようです。

ここに何か不足していますか?

編集:これは私の作品いくつかのより多くのコンテキストに

+0

幅と高さのバインディングはTwoWayである必要があります。例えば、ここ:https://stackoverflow.com/q/2673600/1136211 – Clemens

+0

@Clemens喜びはありません。上記の「TwoWay」にWidthとHeightバインディングを設定し、バインディングを2つの別々のWidthとHeightの二重のプロパティに分離しようとしました。いずれの方法もウィンドウの大きさに従わなかった。 – Dan

+0

サンプルコードはちょっと混乱します。実際にはHasSizeとSizeプロパティを設定していますか? XAMLでウィンドウの高さと幅のプロパティを設定していますか? – mm8

答えて

0

を提供するために、ウィンドウにコンテンツコントロールを追加しました:

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    public bool HasSize { get; set; } = true; 

    public Size Size { get; set; } = new Size(800, 800); 
} 

はXAML:

<Window x:Class="WpfApplication1.Window21" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     Title="Window1" 
     Name="DialogWindowElement"> 
    <Window.Style> 
     <Style TargetType="Window"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding HasSize, ElementName=DialogWindowElement}" Value="True"> 
        <Setter Property="Width" Value="{Binding Size.Width, ElementName=DialogWindowElement}" /> 
        <Setter Property="Height" Value="{Binding Size.Height, ElementName=DialogWindowElement}" /> 
       </DataTrigger> 
       <DataTrigger Binding="{Binding HasSize, ElementName=DialogWindowElement}" Value="False"> 
        <Setter Property="SizeToContent" Value="WidthAndHeight" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Style> 

    <TextBlock Text="Test..." FontSize="40" FontWeight="Bold" /> 
</Window> 

「あなたはドンれていることを確認しますローカル値が優先されるため、XAMLのウィンドウのプロパティをWidthおよびHeightに設定しますスタイル設定者によって設定された値を超える

関連する問題