1

WPF アプリケーションの標準の .net 4 Datagrid ユーザー コントロールで問題が発生していますが、この問題は、アプリケーションがインストールされ、Windows 7 OS で実行されている場合にのみ発生します。MVVM 設計、ObservableCollection、およびデータバインディングを使用して、データグリッド コントロールを実装しました。XAML コードは非常に標準的で、次のようになります。

スタイル:

<Style x:Key="SummaryGrid" TargetType="{x:Type DataGrid}">
    <Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
    <Setter Property="Margin" Value="0,0,0,10"></Setter>
    <Setter Property="GridLinesVisibility" Value="Horizontal"></Setter>
    <Setter Property="BorderBrush" Value="#d4d7db"></Setter>
    <Setter Property="HorizontalGridLinesBrush" Value="#d4d7db"></Setter>
    <Setter Property="BorderThickness" Value="1"></Setter>
    <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter>
    <Setter Property="Foreground" Value="#363636"></Setter>
    <Setter Property="CanUserSortColumns" Value="False"></Setter>
    <Setter Property="RowStyleSelector">
        <Setter.Value>
            <help:RowStyleSelector DefaultStyle="{StaticResource SummaryGridRow}" NewItemStyle="{StaticResource SummaryGridNewRow}"></help:RowStyleSelector>
        </Setter.Value>
    </Setter>
</Style>

ユーザーコントロール:

<UserControl x:Class="BRAPClientApp.Views.VisitList"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d">
<UserControl.Resources>
</UserControl.Resources>
<StackPanel Margin="20,0,0,0" >
    <TextBlock x:Name="header" x:Uid="header" HorizontalAlignment="Left"  Style="{StaticResource h2}" TextWrapping="Wrap" >Scheduled Visits</TextBlock>
    <DataGrid x:Name="fp" ItemsSource="{Binding Path=VisitMenuViewModel.VisitButtons}"
              AutoGenerateColumns="False" 
              CanUserAddRows="False" 
              Style="{StaticResource SummaryGrid}" 
                CellStyle="{StaticResource SummaryGridCell}"
                ColumnHeaderStyle="{StaticResource SummaryGridHeader}" 
              RowHeaderStyle="{StaticResource DataGridRowHeaderStyle1}"
              CanUserDeleteRows="False">
        <DataGrid.Columns>
            <DataGridTextColumn EditingElementStyle="{StaticResource CellEditStyle}" 
                                ElementStyle="{StaticResource CellStyle}" 
                                Header="Client" Width="*" IsReadOnly="True" 
                                Binding="{Binding Path=Visit.OrgName}"></DataGridTextColumn>
            <DataGridTextColumn EditingElementStyle="{StaticResource CellEditStyle}" 
                                ElementStyle="{StaticResource CellStyle}" 
                                Header="Status" Width="*" IsReadOnly="True" 
                                Binding="{Binding Path=Visit.visitStatus}"></DataGridTextColumn>
            <DataGridTextColumn EditingElementStyle="{StaticResource CellEditStyle}" 
                                ElementStyle="{StaticResource CellStyle}" 
                                Header="Start Date" Width="*" IsReadOnly="True" 
                                Binding="{Binding Path=Visit.startdate, StringFormat={}{0:dd/MM/yyyy}}"></DataGridTextColumn>
            <DataGridTemplateColumn Header="Actions">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock >
                        <Hyperlink Command="{Binding Command}" CommandParameter="{Binding Path=Visit.VisitId}" >Start</Hyperlink>
                        <!--<Button Content="Start" Command="{Binding Command}" CommandParameter="{Binding Path=Visit.VisitId}" />-->
                        </TextBlock>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

</StackPanel>

問題は、Load イベントの後に Datagrid 自体のサイズが変更されないように見え、下部にかなりの灰色のスペースが表示されることです。個人的には Datagrid オブジェクトの報告されていないバグだと思いますが、皆さんの考えを知りたいです。以下のスクリーンショットをご覧ください。

問題のスクリーンショット

4

1 に答える 1

0

StackPanela の代わりに使用してからDockPanel、要素を で整理してみてくださいDockPanel.DockDockPanelにはプロパティLastChildFillがあり、デフォルトで次のように設定されてtrueいるためDataGrid、コントロールの空き領域が埋められます。

<DockPanel Margin="20,0,0,0" >
<TextBlock DockPanel.Dock="Top" x:Name="header" x:Uid="header" HorizontalAlignment="Left"  Style="{StaticResource h2}" TextWrapping="Wrap" >Scheduled Visits</TextBlock>
<DataGrid DockPanel.Dock="Top" x:Name="fp" ItemsSource="{Binding Path=VisitMenuViewModel.VisitButtons}"
          AutoGenerateColumns="False" 
          CanUserAddRows="False" 
          Style="{StaticResource SummaryGrid}" 
            CellStyle="{StaticResource SummaryGridCell}"
            ColumnHeaderStyle="{StaticResource SummaryGridHeader}" 
          RowHeaderStyle="{StaticResource DataGridRowHeaderStyle1}"
          CanUserDeleteRows="False">
    <DataGrid.Columns>
        <DataGridTextColumn EditingElementStyle="{StaticResource CellEditStyle}" 
                            ElementStyle="{StaticResource CellStyle}" 
                            Header="Client" Width="*" IsReadOnly="True" 
                            Binding="{Binding Path=Visit.OrgName}"></DataGridTextColumn>
        <DataGridTextColumn EditingElementStyle="{StaticResource CellEditStyle}" 
                            ElementStyle="{StaticResource CellStyle}" 
                            Header="Status" Width="*" IsReadOnly="True" 
                            Binding="{Binding Path=Visit.visitStatus}"></DataGridTextColumn>
        <DataGridTextColumn EditingElementStyle="{StaticResource CellEditStyle}" 
                            ElementStyle="{StaticResource CellStyle}" 
                            Header="Start Date" Width="*" IsReadOnly="True" 
                            Binding="{Binding Path=Visit.startdate, StringFormat={}{0:dd/MM/yyyy}}"></DataGridTextColumn>
        <DataGridTemplateColumn Header="Actions">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock >
                    <Hyperlink Command="{Binding Command}" CommandParameter="{Binding Path=Visit.VisitId}" >Start</Hyperlink>
                    <!--<Button Content="Start" Command="{Binding Command}" CommandParameter="{Binding Path=Visit.VisitId}" />-->
                    </TextBlock>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

于 2013-05-30T10:35:26.617 に答える