MahApps.Metro Flyout中的Datagrid

时间:2013-05-31 21:01:34

标签: wpf datagrid mahapps.metro

我正在尝试使用WPF在MetroWindow控件内使用MahApps.Metro为设置创建弹出窗口。我创建了弹出窗口并有其他几个单选按钮和分隔符。我现在正在添加一个datagrid来保存StockSymbols列表,该列表用作我的应用程序的监视列表。我遇到的问题是正确设置数据网格,使其不会自动增长超出弹出窗口的大小。如果向数据网格添加行,则可以继续添加,直到它从窗口的屏幕外移动。我想这样做,以便我不必手动设置最大高度,并随着窗口的增长动态增长。

以下是弹出窗口的当前代码:

<Controls:MetroWindow.Flyouts>
  <Controls:Flyout Header="Settings"
                   Background="#9f000000"
                   Position="Right"
                   IsOpen="{Binding IsSettingsFlyoutOpen}">
    <DockPanel HorizontalAlignment="Stretch"
               VerticalAlignment="Stretch">
      <StackPanel Orientation="Vertical"
                  VerticalAlignment="Top"
                  HorizontalAlignment="Center"
                  Margin="20,0"
                  DockPanel.Dock="Top">
        <Label Content="Theme"
               Style="{StaticResource DescriptionHeaderStyle}" />
        <StackPanel Orientation="Horizontal">
          <RadioButton Content="Dark"
                       Margin="0,0,5,0"
                       IsChecked="True"
                       Checked="ThemeDark" />
          <RadioButton Content="Light"
                       Margin="0,0,5,0"
                       Checked="ThemeLight" />
        </StackPanel>
        <Separator Margin="0,10,0,10" />
        <Label Content="Accent"
               Style="{StaticResource DescriptionHeaderStyle}" />
        <StackPanel Orientation="Vertical">
          <RadioButton Content="Black"
                       Margin="0,5,0,0" />
          <RadioButton Content="Blue"
                       Margin="0,5,0,0"
                       Checked="AccentBlue" />
          <RadioButton Content="Red"
                       Margin="0,5,0,0"
                       Checked="AccentRed" />
          <RadioButton Content="Green"
                       Margin="0,5,0,0"
                       Checked="AccentGreen" />
          <RadioButton Content="Orange"
                       Margin="0,5,0,0"
                       IsChecked="True"
                       Checked="AccentOrange" />
          <RadioButton Content="Purple"
                       Margin="0,5,0,0"
                       Checked="AccentPurple" />
        </StackPanel>
        <Separator Margin="0,10,0,10" />
      </StackPanel>
      <StackPanel Orientation="Vertical"
                  Height="Auto"
                  VerticalAlignment="Top"
                  DockPanel.Dock="Bottom"
                  Margin="20,0">
        <Label Content="Watch List"
               Style="{StaticResource DescriptionHeaderStyle}" />
        <DataGrid ItemsSource="{Binding WatchList}"
                  AutoGenerateColumns="False"
                  CanUserResizeRows="False"
                  CanUserReorderColumns="False"
                  HeadersVisibility="Column">
          <DataGrid.Columns>
            <DataGridTextColumn Header="Symbol"
                                Binding="{Binding Symbol}" />
            <DataGridTextColumn Header="Name"
                                Binding="{Binding Name}" />
          </DataGrid.Columns>
        </DataGrid>
      </StackPanel>
    </DockPanel>
  </Controls:Flyout>
</Controls:MetroWindow.Flyouts>

感谢任何和所有帮助。

2 个答案:

答案 0 :(得分:0)

我通过仅使用Dock Panel来保存Flyout内的所有控件来解决这个问题。所有控件但数据网格应设置为顶部对接,并且数据网格上没有对接设置。然后,这会自动调整数据网格的大小以填充剩余的空间,而不再需要。

答案 1 :(得分:0)

我遇到了同样的问题。 我解决了设置Flyout大小的问题。 我认为当WPF渲染网格并且Flyout大小小于网格大小时会出现问题。

无论如何,我们的Flyout是动态的,我必须创建一个转换器来获取它的大小并将我的子控件设置为相同的宽度