使用datagrid和expandder的wpf布局

时间:2017-06-19 16:12:31

标签: wpf xaml layout devexpress

我无法让我的xaml以我想要的方式工作。

我想要的是这个。 我的ItemsControl的高度应为70.其余部分应填充DockPanel。 在DockPanel里面我有一个GridControl(来自DevExpress的DataGrid),它应该填满所有空白区域。 gridcontrol停靠在顶部。在网格控制下面,但仍然在底板上,我有一个最大高度为480的扩展器,它应该停靠在底部。

我遇到的问题是我无法让gridcontrol动态地改变它的高度,以便它填充停靠面板顶部和扩展器之间的所有剩余空间。

我做错了什么?

<Grid Background="White">
<Grid.RowDefinitions>
    <RowDefinition Height="70" />
    <RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
</Grid.ColumnDefinitions>

<!--#region ItemControl-->
<ItemsControl
    Grid.Row="0"
    Grid.ColumnSpan="9"
    HorizontalAlignment="Stretch"
    IsTabStop="False"
    ItemsSource="{Binding Path=ToolbarControlViewModel.CommandButtonList}"
    Style="{DynamicResource ActionBarPanel}">
    <ItemsControl.ItemsPanel>
        ...
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            ...
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
<!--#endregion-->

<DockPanel Grid.Row="1">

    <!--#region Listview-->
    <dxg:GridControl
        x:Name="CMGrid"
        DockPanel.Dock="Top"
        Margin="0,0,0,10"
        ItemsSource="{Binding Path=CustomerManagementListViewModel.Customers}"
        ScrollViewer.VerticalScrollBarVisibility="Visible">
        <dxg:GridControl.Columns>
            ...
        </dxg:GridControl.Columns>
        <dxg:GridControl.View>
            <dxg:TableView
                x:Name="CustomerListView"
                AllowBestFit="True"
                FocusedRow="{Binding Path=CustomerManagementListViewModel.SelectedCustomer, Mode=TwoWay}"
                IsColumnMenuEnabled="False"
                NavigationStyle="Row"
                ShowGroupPanel="False" 
                AutoWidth="True"/>
        </dxg:GridControl.View>
    </dxg:GridControl>
    <!--#endregion-->

    <!--#region Controls-->
    <Expander
        MaxHeight="480"
        VerticalContentAlignment="Stretch"
        DockPanel.Dock="Bottom"
        Header="{T:Translate Equipment,
                             Format=' {0}:'}"
        IsExpanded="True"
        Style="{StaticResource K2M_Epander_Base}" VerticalAlignment="Bottom">
        <Expander.Content>
            <Grid>
                ...
            </Grid>
        </Expander.Content>
    </Expander>
    <!--#endregion-->
</DockPanel>

1 个答案:

答案 0 :(得分:1)

我很难获得这么快的分数,但如果问题仍然存在,我想我们可能会给未来的发现者一些关闭。

所以,public static Task<HttpResponseMessage> Run( HttpRequestMessage req, ExecutionContext executionContext) { string invocationId = executionContext.InvocationId.ToString(); var processor = new Processor(invocationId); return processor.Process(req); } public class Processor { private Logger logger; public Processor(string invocationId) { this.logger = new Logger(invocationId); } public async Task<HttpResponseMessage> Process(HttpRequestMessage req) { await this.logger.Log("Start"); await this.DoStep1(); await this.DoStep2(); await this.logger.Log("Finish"); } private async Task DoStep1() { await this.logger.Log("Step 1"); // ... } private async Task DoStep2() { await this.logger.Log("Step 2"); // ... } } 有其用途,但在这种情况下,它是你的罪魁祸首。由于嵌套在布局中的DockPanel基本上相当于将DockPanel属性附加到GridControl。这解释为它只从父行的顶部向下消耗它所需的空间。

通过完全删除VerticalAlignment="Top"(因为在这种情况下它是多余的)并将Row声明直接应用于DockPanel,它可以充当父GridControl的正常子节点。容器并将占用Row的Grid声明提供的空间。

很高兴你把它分类,得到了快速的'n'。干杯:)