首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >申请解决问题

申请解决问题
EN

Stack Overflow用户
提问于 2014-01-30 11:31:32
回答 3查看 893关注 0票数 1

这是我一直跳到最后的事情,因为我似乎找不到答案,我找了这么久。

我在一个窗口中有一个应用程序,我已经构建了应用程序到我的屏幕分辨率是1600 x 900。如果我以1024x768的分辨率在屏幕上运行应用程序,我的整个界面就不会缩小。

示例.

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

我想要发生的事。

如果你们中有谁知道这个烦人问题的解决办法,请告诉我。

我对决心知之甚少,只是我做了几个小时的研究。

EDIT1

以下是我的一些XAML:

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-30 11:44:14

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

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

代码语言:javascript
复制
<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网站的Tutorial.net页面。

票数 3
EN

Stack Overflow用户

发布于 2014-01-30 11:39:52

你描述的问题其实是很容易解决的,你从来没有用固定的大小来做任何事情。你所有的面板都必须相对于某物进行调整。

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

代码语言:javascript
复制
<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>

梯度在那里,所以当您调整大小时,可以看到它的工作情况。

票数 3
EN

Stack Overflow用户

发布于 2014-01-30 12:22:56

如果您已经按照固定的分辨率进行了设计,那么一个简单的方法就是将所有内容封装在ViewBox中,并为封装子节点提供与您设计的分辨率相同的维度。因此,如果您为1600x900设计,并且您的主窗口包含以下内容:

代码语言:javascript
复制
<Grid>
    <TextBlock Text="Big Text" FontSize="100" />
</Grid>

...then将其替换为:

代码语言:javascript
复制
<Viewbox Stretch="Uniform">
    <Grid Width="1600" Height="900">
        <TextBlock Text="Big Text" FontSize="100" />
    </Grid>
</Viewbox>

然后从下一天开始做好你的UI设计。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21455285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档