申请解决问题

这是我一直在跳过,直到结束的事情,因为我似乎无法找到答案,并且我渴望这么久。

我在窗口中有一个应用程序,并且我已将应用程序构建为1600 x 900的屏幕分辨率。如果我在屏幕上以1024 x 768的分辨率运行应用程序,我的整个界面不会缩小。

例。

在这里输入图像描述

现在我知道很多人会考虑添加Dockpanels等......但我已经试图做到这一点。 当你改变决议它不起作用,它只是将对象修复到一个地方。

我想要发生的事情。

在这里输入图像描述

如果您有任何人知道解决这个令人讨厌的问题的方法,请告诉我。

我对决议知之甚少,只是我在研究上做了几个小时。

EDIT1

这里是我的一些XAML:

<DockPanel HorizontalAlignment="Left" Height="236" LastChildFill="False" Margin="380,150,0,0" VerticalAlignment="Top" Width="792">
        <DataGrid x:Name="dgFake" VerticalAlignment="Center" Height="236" ItemsSource="{Binding}" Foreground="#FF474747" BorderBrush="#FFBDBDBD" HorizontalGridLinesBrush="{x:Null}" VerticalGridLinesBrush="{x:Null}" CanUserResizeRows="False" ScrollViewer.CanContentScroll="True" Background="#FFEEFAFF" RowBackground="#FFEEFAFF" RowHeaderWidth="0" RowHeight="25" AutoGenerateColumns="False" Width="792" DockPanel.Dock="Left" FontSize="16" TextBlock.TextAlignment="Center" HorizontalContentAlignment="Stretch" SelectionChanged="dgFake_SelectionChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding FFF}" Header="FFF" Visibility="Hidden" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" Width="*" />
                <DataGridTextColumn Binding="{Binding EEE}" Header="EEE" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" Width="*" />
                <DataGridTextColumn Binding="{Binding GGG}" Header="GGG" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" Width="*"/>
                <DataGridTextColumn Binding="{Binding CCC}" Header="CCC" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" Width="*"/>
                <DataGridTextColumn Binding="{Binding BBB}" Header="BBB" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" Width="*"/>
                <DataGridTextColumn Binding="{Binding AAA}" Header="AAA" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" Width="*"/>
                <DataGridTextColumn Binding="{Binding DDD}" Header="DDD" CanUserResize="False" CanUserSort="False" CanUserReorder="False" IsReadOnly="True" TextBlock.TextAlignment="Center" Width="*"/>
            </DataGrid.Columns>

<Label x:Name="lblView" Content="Select View ..." HorizontalAlignment="Left" Margin="380,109,0,0" VerticalAlignment="Top" Foreground="#FF474747"/>
    <ComboBox x:Name="cmbViews" HorizontalAlignment="Left" Margin="380,124,0,0" VerticalAlignment="Top" Width="162" Text="Select ..." SelectionChanged="cmbView">
        <ComboBoxItem Content="Company" Foreground="#FFA2A2A2"/>
        <ComboBoxItem Content="Employee" Foreground="#FFA2A2A2"/>
    </ComboBox>

我怀疑你已经基本设计了你的WPF应用程序,就好像它是一个WinForms应用程序一样,在UI元素上设置了精确的HeightWidth值。 这不是我们如何布局WPF中的UI元素。 如果你确实这样做了,那么把它们放在DockPanel并不能解决你的问题是正确的。

在WPF中,我们通常使用Grid元素充分利用提供给它们的可用空间。 将Grid.ColumnDefinition.Width设置为Auto ,另一个设置为*将填充所有可用宽度:

<Grid.ColumnDefinitions>
    <ColumnDefinition Width="Auto" /> <!-- Just big enough for content -->
    <ColumnDefinition Width="*" />    <!-- Fills all remaining space -->
</Grid.ColumnDefinitions>
...
<TextBlock Grid.Column="1" Text="I'm in the right cell" />

这只是很多示例...请阅读WPF Tutorial.net网站的“WPF布局简介”页面以获取更多信息。


你描述的问题实际上很容易解决,你根本就不会使用固定大小的任何东西。 所有的面板都必须相对于某个东西来确定尺寸。

改变屏幕的分辨率与改变窗口的大小是一样的。 如果它适用于1024x768的Window.Size ,它将以1024x768的分辨率工作。

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="384" Width="525">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition />
    </Grid.ColumnDefinitions>

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

    <!-- Pretend I'm a logo -->
    <Border Height="23" Width="75" HorizontalAlignment="Left" Background="Blue" CornerRadius="5" Padding="3">
        <TextBlock Foreground="White">Logo</TextBlock>
    </Border>

    <WrapPanel Grid.Row="0" Grid.Column="1"  HorizontalAlignment="Right" Orientation="Horizontal">
        <TextBlock Text="About" Margin="6"/>
        <TextBlock Text="Home" Margin="6"/>
        <TextBlock Text="Help" Margin="6"/>
        <TextBlock Text="Settings" Margin="6"/>
    </WrapPanel>

    <ListBox Grid.Row="1" Grid.Column="0"  
             BorderThickness="0">
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
        <TextBlock Text="Example" Margin="6"/>
    </ListBox>

    <Grid Grid.Row="1" Grid.Column="1">
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <Border >
            <Border.Background>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                    <GradientStop Color="Red" />
                    <GradientStop Color="White" Offset="1"/>
                </LinearGradientBrush>
            </Border.Background>
            <TextBlock>I'm a Data Grid</TextBlock>
        </Border>

        <GridSplitter Grid.Row="1" VerticalAlignment="Top" Height="3"/>

        <Border Grid.Row="1" Margin="0,3,0,0">            
            <Border.Background>
                <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                    <GradientStop Color="Blue" />
                    <GradientStop Color="White" Offset="1"/>
                </LinearGradientBrush>
            </Border.Background>
            <TextBlock>I'm a Data Grid</TextBlock>
        </Border>

    </Grid>
</Grid>
</Window>

渐变是在那里,所以你可以看到它的工作时,你调整大小。


如果你已经设计了一个固定的分辨率,那么一个简单的黑客就是将所有东西都包装在一个ViewBox中,并给封装子项设置与你设计的分辨率相同的尺寸。 所以如果你设计了1600×900,你的主窗口包含这个:

<Grid>
    <TextBlock Text="Big Text" FontSize="100" />
</Grid>

...然后用这个替换它:

<Viewbox Stretch="Uniform">
    <Grid Width="1600" Height="900">
        <TextBlock Text="Big Text" FontSize="100" />
    </Grid>
</Viewbox>

然后记下下一次从第1天开始正确地进行UI设计。

链接地址: http://www.djcxy.com/p/36847.html

上一篇: Application Resolution Issue

下一篇: Application that changed for different resolutions