奇怪的布局问题MVVM .Net 4.7.2应用程序控件消失

时间:2018-10-28 19:11:43

标签: c# wpf mvvm layout .net-4.7.2

我正在使用.Net 4.7.2构建类似于向导(基于https://www.codeproject.com/KB/WPF/InternationalizedWizard.aspx?display=Print的MVVM应用程序,因此没有其他框架,只有RelayCommand类,{{1} }承载主视图(该视图在左侧具有向导的导航项目,在右侧区域具有根据向导的阶段显示的子视图)。

Mi问题是我的一个用户的控件出现了非常奇怪的行为。这是应用程序外观的示例照片:

enter image description here

这是用户发生的情况的示例照片。请注意,左下角的图像消失了,左下角的条也消失了,标题和顶部文本已经向上移动并在窗口内进行了剪切,而右侧的其余内容也消失了。 enter image description here

类似于基本的InternationalizedWizard App,我将控件放置在网格中,该网格的水平+垂直对齐方式设置为可拉伸。

MainWindow.cs

我将这种样式应用于HeaderedContentControl:

        <Border Background="White" Grid.Column="1" Grid.Row="0">
                <ScrollViewer>
                    <HeaderedContentControl Content="{Binding Path=CurrentPage}" Header="{Binding Path=CurrentPage.DisplayName}" />
                </ScrollViewer>
            </Border>

scrollviewer仅在内容较大时上下滚动,但是在这种情况下,内容应该适合,以便按预期用户不会看到scrollviewer。

左下角奇怪消失的图像放在自定义边距的网格的第0列第0列中,因此保留在该区域:

<Style TargetType="{x:Type HeaderedContentControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type HeaderedContentControl}">
                <StackPanel Margin="2,0">
                    <Grid Margin="1,1,1,12" RenderTransformOrigin="0.5,0.5">
                        <Rectangle Fill="{DynamicResource {x:Static SystemColors.AppWorkspaceBrushKey}}" Height="3" Margin="10,-4" Opacity="0.6" RadiusX="8" RadiusY="8" VerticalAlignment="Bottom" />
                        <ContentPresenter ContentSource="Header" TextBlock.FontSize="22" TextBlock.FontWeight="DemiBold" TextBlock.Foreground="Black" HorizontalAlignment="Center" VerticalAlignment="Center" OpacityMask="Black" />
                        <Grid.Effect>
                            <DropShadowEffect Opacity="0.1" />
                        </Grid.Effect>
                        <Grid.RenderTransform>
                            <RotateTransform Angle="0" />
                        </Grid.RenderTransform>
                    </Grid>
                    <Grid>
                        <Rectangle Fill="{TemplateBinding Background}" />
                        <ContentPresenter ContentSource="Content" />
                    </Grid>
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

显示的第一页(例如,欢迎页面)有另一个包含两个的网格

<Image Grid.Column="0" Grid.Row="0" Source="..\Assets\SplashLogo.png" HorizontalAlignment="Center" VerticalAlignment="Bottom" Stretch="None" Margin="20,20,20,20"/>

但是堆栈面板的内容在视图中完全消失了。

最后,主视图的底部在这样的边框中创建,该边框也从视图中完全消失:

<Grid>
        <Grid.RowDefinitions>
            <RowDefinition MinHeight="30" MaxHeight="60"/>
            <RowDefinition Height="*" MinHeight="200"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0"  Text="{x:Static res:Strings.SomeText_Description}" FontSize="15" FontWeight="Light" Margin="20,0,20,0"  TextWrapping="Wrap" />
        <StackPanel Grid.Row="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
            <Label   Content="{x:Static res:Strings.WelcomeView_SomeText}" FontSize="15" FontWeight="Light" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20,0,20,0" />
            <TextBox   Text="{Binding Path=SomeInput, UpdateSourceTrigger=PropertyChanged}" Height="25" Width="200" FontSize="15" FontWeight="Light" HorizontalAlignment="Left">
                <TextBox.InputBindings>
                    <KeyBinding Key="Enter" Command="{Binding MoveNextFromWelcomeCommand}" CommandParameter="{Binding Path=Text, RelativeSource={RelativeSource AncestorType={x:Type TextBox}}}" />
                </TextBox.InputBindings>
            </TextBox>
        </StackPanel>
    </Grid>

最初,我认为.NET或OS的版本可能存在问题,但是我的用户使用的是Windows 10 Enterprise(10.0.17134)的最新版本,并且双屏显示为1:3840x2160 2:2560x1600。我试图在自己的计算机上复制该文件,但是一切对我来说都很好。我还在Windows 7中测试了该应用程序,并且该应用程序没有任何问题。

我真的不知道会发生什么,这与用户的DPI设置或任何可访问性功能有关吗?

编辑:

为了使事情变得容易一些,这是主视图的xaml的完整代码:

<Border Grid.Column="0" Grid.Row="1" Background="LightGray" Grid.ColumnSpan="2">

                        <Grid >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>

                            <Grid.RowDefinitions>
                                <RowDefinition Height="*" />
                                <RowDefinition Height="*" />
                            </Grid.RowDefinitions>

                            <TextBlock Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="5" Margin="4" FontSize="15" Text="{Binding Path=ReportStatus}" VerticalAlignment="Center" Visibility="{Binding Path=ShowReportStatus}" />

                            <!-- NAVIGATION BUTTONS -->
                            <Grid Grid.Column="2" Grid.Row="0" Grid.IsSharedSizeScope="True" HorizontalAlignment="Right" >
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition SharedSizeGroup="Buttons" />
                                    <ColumnDefinition SharedSizeGroup="Buttons" />
                                    <ColumnDefinition SharedSizeGroup="Buttons" />
                                    <ColumnDefinition SharedSizeGroup="Buttons" />
                                </Grid.ColumnDefinitions>
                                <Button Grid.Column="1" Grid.Row="0" Command="{Binding Path=MovePreviousCommand}" Style="{StaticResource movePreviousButtonStyle}" />
                                <Button Grid.Column="2" Grid.Row="0" Command="{Binding Path=MoveNextCommand}" Style="{StaticResource moveNextButtonStyle}" />
                                <Button Grid.Column="3" Grid.Row="0" Command="{Binding Path=CancelCommand}" Style="{StaticResource cancelButtonStyle}" />

                            </Grid>
                        </Grid>
                    </Border>

0 个答案:

没有答案