在窗口大小wpf内设置控件的高度和宽度

时间:2012-10-23 11:47:43

标签: wpf

我有一个以下的xaml文件

<Window x:Class="NodeXL_Graph_Drawer.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:controls="clr-namespace:Technewlogic.Samples.WpfModalDialog"                      
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="NodeXL Graph" xmlns:my="clr-namespace:Smrf.NodeXL.Visualization.Wpf;assembly=Smrf.NodeXL.Control.Wpf" Loaded="Window_Loaded">
<Grid>
    <Grid x:Name="ModalDialogParent" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" x:Name="col1"/>
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <StackPanel Grid.Column="0" >
            <my:NodeXLControl Name="nodeXLControl1" HorizontalAlignment="Left"  EdgeSelectedColor="Red" VertexSelectedColor="Red" ShowVertexToolTips="True" VertexClick="nodeXLControl1_VertexClick" SelectionChanged="nodeXLControl1_SelectionChanged" MouseMode="Select" MouseAlsoSelectsIncidentEdges="False" ContextMenuOpening="nodeXLControl1_ContextMenuOpening" GraphLaidOut="nodeXLControl1_GraphLaidOut">

            </my:NodeXLControl>
        </StackPanel>
        <!--<ComboBox Height="23" Margin="39,12,119,0" Name="comboBox1" VerticalAlignment="Top" SelectionChanged="comboBox1_SelectionChanged" />-->
        <GridSplitter Grid.Column="1" HorizontalAlignment="Stretch"/>

        <StackPanel Grid.Column="2">                
            <toolkit:DataGrid AutoGenerateColumns="True" Margin="0,62,0,0" Name="grdGraphDetails" ItemsSource="{Binding GraphDetail}" IsReadOnly="True" 
                          HorizontalAlignment="Right" Width="109" MouseLeftButtonUp="grdGraphDetails_MouseLeftButtonUp" 
                          SelectedValuePath="Key" Height="179" />              
        </StackPanel>

    </Grid>
    <controls:ModalDialog x:Name="ModalDialog"></controls:ModalDialog>         
    <controls:ModalDialog1 x:Name="ModalDialog1"></controls:ModalDialog1>
</Grid>    

这里我有两个控件NodeXlControl1和Datagrid1在页面上由网格seprator分隔。窗口加载时,NodeXlControl1不在网格列的宽度和高度范围内。我希望nodexlcontrol1应该在网格列的宽度和高度中显示。如果它超出了列宽和高度的限制,滚动条应该会出现。

1 个答案:

答案 0 :(得分:0)

如果您的my:NodeXLControl内部有一些滚动查看器(例如某些基于ItemsControlScrollViewer的孩子),那么只需将my:NodeXLControl包裹在Grid中即可特技。

StackPanel扩展为溢出孩子们。 Grid扩展到外部容器的可用空间。

<Grid>
    <my:NodeXLControl  ... />

应该做的伎俩。

但是如果你my:NodeXLControl中没有滚动查看器,那么你需要将它包装在其中并为其提供absolute宽度或高度或将其包裹在Grid内绑定到其可用的空间并相应地显示滚动条。

e.g。

   <Grid>
      <ScrollViewer ...>
        <my:NodeXLControl ...>