C# 不同分辨率下面向WPF的应用程序窗口大小

C# 不同分辨率下面向WPF的应用程序窗口大小,c#,wpf,screen-resolution,C#,Wpf,Screen Resolution,我有一个WPF应用程序。为了使全屏幕在所有屏幕尺寸上都可见,我也在Window&Containers中实现了MinHeight、MinWidth&HorizontalAlignment=“Stretch”VerticalAlignment=“Stretch”。当应用程序在低分辨率屏幕上运行时,我面临一些问题。窗口从屏幕右侧被剪切-这不会在右上角显示Min、Max、Close BTN 如果我在中添加布局代码,那么窗口在所有分辨率中都是正确的,但它在菜单栏上方和末尾下方留下空白。在移除时,它们没有空

我有一个WPF应用程序。为了使全屏幕在所有屏幕尺寸上都可见,我也在Window&Containers中实现了MinHeight、MinWidth&HorizontalAlignment=“Stretch”VerticalAlignment=“Stretch”。当应用程序在低分辨率屏幕上运行时,我面临一些问题。窗口从屏幕右侧被剪切-这不会在右上角显示Min、Max、Close BTN

如果我在中添加布局代码,那么窗口在所有分辨率中都是正确的,但它在菜单栏上方和末尾下方留下空白。在移除时,它们没有空间,一切都很好,但右侧在低分辨率屏幕中被切割。使用ViewBox,在布局上方和下方留出空间。我的XML代码如下所示:

代码已更新

    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <!-- MENU BAR -->
        <Menu Grid.Row="0" x:Name="myMnus" VerticalAlignment="Top" Cursor="Hand" HorizontalAlignment="Stretch" IsMainMenu="True" Grid.ColumnSpan="2">
           .............
        </Menu>

        <ToolBarTray HorizontalAlignment="Stretch"  Background="White" Margin="0,19,114,0" VerticalAlignment="Top" Grid.ColumnSpan="2"  >
             ..............
        <ToolBarTray>

        <TabControl Grid.Row="1" Name="tabControl1" HorizontalAlignment="Left"  Margin="0,3,0,0" VerticalAlignment="Top" 
                TabStripPlacement="Bottom" Grid.RowSpan="2" BorderThickness="4,25,4,1" FontSize="13">
        </TabControl>

        <TabControl Grid.Row="2" Name="tabControl4" HorizontalAlignment="Left" Margin="0,323,0,0" VerticalAlignment="Stretch" 
                TabStripPlacement="Bottom" BorderThickness="4,25,4,1"  FontSize="13" Background="White" Width="227">
        </TabControl>

        <TabControl TabStripPlacement="Bottom" MinHeight="415" MinWidth="480" VerticalAlignment="Stretch"  HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="1" Name="tabChildContainer" Margin="227,3,207,0" BorderThickness="4,25,4,1" Grid.RowSpan="2" >

        </TabControl>

    </Grid>

.............
..............


我认为通过在水平对齐和垂直对齐中使用Stretch以及MinWidth和MinHeight,它将在水平和垂直方向上占据所有可用空间。但是tabChildContainer TabControl不会进入右端角,它应该根据代码进入右端角。

这就是问题的根源:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="762.976"/>
    <ColumnDefinition Width="751.024"/>
    <ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>

每当你在你的用户界面中设置精确的像素大小时,你都在问这些问题。为应用程序的各个部分设置精确的大小更像是WinForms的事情。。。WPF有许多控件可以为您调整内容大小。。。您正在使用一个,即
网格
。。。只是不正确


其次,在整个UI上使用
视图框是非常不寻常的。。。这对你没有帮助。最好的办法是简单地删除它和所有硬编码维度,并充分利用
网格中的
“*”
“Auto”
值。当控件以这种方式调整自身大小(或网格调整大小)时,用户使用的分辨率实际上并不重要。

哦,谢谢Sheridan,只保留了2列&行1列(使用Auto)和1列(使用*帮助我至少解决了分辨率问题)。但现在有了另一个——正如您从代码中所知道的,我在左侧有两个TabControls,分别位于第1行和第2行&两个选项卡中都有TreeViews。当树扩展tabControl1时,其宽度也会增加,但这不会增加tabcontrol4的宽度。同样,我希望第1行和第2行的高度相同。我尝试使用Auto,2,但没有得到预期的结果。我删除了tabControl1的HorizontalAlignment=“Stretch”VerticalAlignment=“Stretch”,并消除了宽度扩展问题。现在,只需要一件事——tabControl1和tabControl4的高度相同。伙计,看看你的
TabControl
定义。。。您有这样一个:
Margin=“227,3207,0”
因此它当然不会一直延伸到边缘。删除或减少您的
边距
值,应该可以。哦,是的,已经解决了。谢谢。非常感谢您的支持。@Sheridan即使在构建具有相对大小的几乎可伸缩的ui时也是如此。我仍然会遇到关于文本大小、边框厚度、边距和填充的问题,这些问题在没有缩放的地方。你知道如何实现一个可以以不同分辨率显示的完全可伸缩的UI吗?我删除了tabControl1的HorizontalAlignment=“Stretch”VerticalAlignment=“Stretch”,并消除了宽度扩展问题。现在,只需要一件事-tabControl1和tabControl4的高度相同。