2016-08-26 26 views
2

我有一個三個不同控件的網格,兩個是groupbox,第三個是樹形視圖。 我不知道最初的寬度,所以Window.SizeToContent被設置爲「寬度」 一切完美契合在窗口內,問題出現在我從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> 

我與ColumnDefinition.Width嘗試=「*」,Horizo​​ntalContentAlignment,和很多人型動物的方式,我也試圖把它ScrollbarViewer內,似乎沒有任何工作。總是在擴展節點時,整個窗口會隨着節點的內容而擴展(實際上它非常長)。我很確定問題是Window.SizeToContent ='Width',但是如果我不知道原始寬度,我還可以爲剩下的控件做些什麼?任何Idead,提前致謝!

--edit

好解決方案更容易超出預期,在事件中,我Window_Loaded得到gbAttachments.ActualWidth,並將其分配給TreeView.MaxWidth 不美麗,漂亮確保它可以通過XAML完成,但它正在工作。

+0

我只看到一個groupbox - 應該有2個嗎? –

+0

是@Aaron,我只是把樹視圖和主網格的代碼 – Nekeniehl

回答

1

你可以嘗試設置節點的MaxWidth財產在你的樹:

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

或者,你可以綁定這個價值的東西,例如另一種元素:

<Style TargetType="TreeViewItem"> 
    <Setter Property="MaxWidth" 
     Value="{Binding ElementName=gbAttachments, Path=ActualWidth}"></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