2016-08-26 1 views
2

나는 세 가지 differents 컨트롤, 두 개의 그룹 상자 및 세 번째 treeview 있습니다. Window.SizeToContent가 "Width"로 설정되도록 초기 너비를 알지 못합니다. 모든 것이 완벽하게 창 내부에 맞습니다. 문제는 TreeView에서 노드를 확장하면 Window.Width가 새로운 너비에 맞춰집니다. treeView는 완벽하지만 컨트롤의 나머지 부분은 좋지 않습니다.SizeToContent.Width 및 TreeView

나는 SizeToContent에 의해 주어진 "원래"폭을 유지하고, 나는 treeViewNode 대신 전체 Window.Width 여기

을 변경 확장 할 때 스크롤바를 좀하고 싶습니다은 XAML (단지 주요 그리드와이다 트 리뷰)

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto" /> 
     <ColumnDefinition Width="Auto" /> 
    </Grid.ColumnDefinitions> 

    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
     <RowDefinition Height="Auto" /> 
    </Grid.RowDefinitions> 

    <!--Attachments--> 
    <GroupBox x:Name="gbAttachments" Header="Attachments" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalContentAlignment="Stretch"> 

     <TreeView x:Name="tvAttachments" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Visible" /> 

    </GroupBox> 
    <!--Attachments--> 
</Grid> 

나는 = "*", HorizontalContentAlignment, 그리고 다른 사람의 differents 방법이 많이 나는 또한 ScrollbarViewer 안에 넣어 시도 아무것도 작동하는 것 같다되지 ColumnDefinition.Width으로 시도했다. 항상 노드를 확장하면 전체 창은 노드의 내용으로 확장됩니다 (실제로는 꽤 길다). 나는이 문제가 Window.SizeToContent = 'Width'라고 확신하지만, 원래 너비를 모르는 경우에는 나머지 컨트롤에 대해 무엇을 할 수 있습니까? 모든 아이디어, 미리 감사드립니다!

--edit

음이 솔루션은, 경우에 나는 gbAttachments.ActualWidth를 얻을 수 Window_Loaded와 아름 다운 아니, 확신이 XAML 수행 할 수있는 TreeView.MaxWidth 에 할당, 예상보다 쉬웠다 그러나 그것은 효과적이다.

+0

하나의 그룹 상자 만 보입니다. 여기에 2 명이 있어야합니까? –

+0

예 @Aaron, 방금 treeview 및 기본 그리드에 대한 코드를 넣었습니다. – Nekeniehl

답변

1

당신은 당신의 트리에서 노드의 MaxWidth 속성을 설정을 시도 할 수 : 또한

<Style TargetType="TreeViewItem"> 
    <Setter Property="MaxWidth" 
     Value="{Binding ElementName=gbAttachments, Path=ActualWidth}"></Setter> 
</Style> 

: 또는

<Style TargetType="TreeViewItem"> 
    <Setter Property="MaxWidth" Value="80"></Setter> 
</Style> 

, 당신은 예를 들어 다른 요소로 뭔가를이 값을 바인딩 할 수 있습니다 , 윈도우의 자동 크기 조정이 초기화 된 후에 발생하지 않아도된다고 염려된다면 윈도우 초기화에서만 자동 크기 조정이 수행되도록 코드에서 어떤 것을 시도 할 수 있습니다 :

public MainWindow() 
{ 
    InitializeComponent(); 

    // auto-size width, and save off value 
    this.SizeToContent = System.Windows.SizeToContent.Width; 
    var actualWidth = this.ActualWidth; 
    // manual-size width 
    this.SizeToContent = System.Windows.SizeToContent.Manual; 
    // set value to what it was, when auto-sized 
    this.Width = actualWidth; 
} 
+0

답장을 보내 주셔서 감사합니다. 모든 솔루션을 시도했지만 여전히 TreeViewItem을 확장하면 전체 창 너비가 함께 적용됩니다. ActualWidth가 0이고, MVVM을 사용하고 있기 때문에 내부의 모든 컨트롤의 실제 폭을 가져올 수없는 이유 때문에 코드 배후의 솔루션이 더 이상하지 않습니다. – Nekeniehl

+0

가이드 안내에 감사드립니다. 해결 방법 : 내가 한 트릭은 Window_Loaded 이벤트에 있는데, 일단 gbAttachments에 초기화 된 ActualWidth가 포함되어 있으면 해당 이벤트가 발생하여 TreeView의 maxWidth를 얻습니다. – Nekeniehl