2017-12-20 1 views
0

일부 기능을 추가하기 위해 Window을 확장했으며이 중 일부는 특정 창 크기를 지정하거나 내용의 크기를 지정하는 기능입니다. 코드 숨김은 현재 MVVM 화되지 않은 것처럼 보입니다.WPF DataTrigger setters가 창 너비와 높이가 변경되지 않음

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'로 설정하고 바인딩을 두 개의 별도의 너비 및 높이 이중 속성으로 분리하려고했습니다. 어떤 접근 방식도 창을 크기에 따르지 않았습니다. – 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에서 창의 속성 인 WidthHeight을 설정하십시오. 스타일 설정자가 설정 한 값을 초과합니다.

관련 문제