2016-08-26 2 views
2

私は3つの異なるコントロール、2つはグループボックス、3つ目はツリービューですグリッドを持っています。 最初の幅がわからないので、Window.SizeToContentが "幅"に設定されています すべてがウィンドウ内に完全に収まります。ツリービューからノードを拡張すると問題が発生しました.Width.Widthは新しい幅に調整されます。ツリービューは完璧にフィットしますが、残りのコントロールはそれほど素晴らしいものではありません。SizeToContent.WidthとTreeView

私はSizeToContentによって与えられた「オリジナル」の幅を維持したい、と私は代わりに、ここでは全体Window.Width

を変更treeViewNodeを拡張する際にスクロールバーを得るでしょうが、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 = '幅'であることを確信していますが、元の幅がわからない場合は、残りのコントロールに対して何ができるのでしょうか?すべてのアイデア、事前に感謝!解決策は、予想以上に簡単だった

--edit

まあは、イベントに私はgbAttachments.ActualWidthを取得し、それがXAMLで行うことができますかなり確信して、美しいないTreeView.MaxWidth に割り当てWindow_Loadedしかしそれは働いている。あなたは、ツリー内のノードのMaxWidthプロパティ設定してみてください可能性があり

+0

私は1つのグループボックスしか見ることはできません - ここに2があるはずですか? –

+0

はい@アーロン、私はちょうどツリービューとメイングリッドのコードを入れました – Nekeniehl

答えて

1

:また

<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

ガイドのおかげで解決方法: 私がしたトリックは、WindowLoadedイベントにあります.GbAttachmentsには、初期化されたActualWidthが含まれていますので、これを取得してTreeViewのmaxWidthを取得してください。 – Nekeniehl