Маcштабирование c# wpf

697
12 января 2017, 03:26

Доброго времени суток. Разрабатывал приложение на мониторе 4:3 и сейчас купил 16:9. На 4:3 оно почти во весь экран а на 16:9 ничего не видно почти. Как бороться с этим?

Хотелось бы реализовать режим во все окно. Но опять же элементы остаются на местах растягивается только окно. Как увеличить их и оставить в том же месте?

Когда очень много вот кусок, может если его доделать то и все остальное по принципу сделаю

<StackPanel Margin="0,90,0,0" Height="360" VerticalAlignment="Top" >
        <TabControl x:Name="MainTab" Height="393" Margin="0,-34,0,0" Background="{x:Null}" BorderBrush="{x:Null}" >
            <TabItem  Header="Anastasia" Style="{DynamicResource TabButtons}" Margin="16,2,-16,-2" >
                <Grid HorizontalAlignment="Left" Width="311">
                    <TextBox x:Name="UserMessage" Margin="0,0,0,10" Background="{x:Null}" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="300" Foreground="White" KeyDown="UserMessage_KeyDown" PreviewKeyDown="UserMessage_PreviewKeyDown" >
                        <TextBox.BorderBrush>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF00E2C3" Offset="0"/>
                                <GradientStop Color="#FF5100C7" Offset="1"/>
                            </LinearGradientBrush>
                        </TextBox.BorderBrush>
                    </TextBox>
                    <ListView x:Name="MainChat" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" Background="{x:Null}" 
                  Margin="5,191,0,39" IsEnabled="False" Foreground="White"  BorderBrush="{x:Null}" ItemTemplateSelector="{StaticResource TS}"
                  ItemsSource="{Binding TempSelect}" Style="{DynamicResource ListViewStyle}" RenderTransformOrigin="0.5,0.5" HorizontalAlignment="Left" Width="304" >
                    </ListView>
                    <Label x:Name="UserCommand"  Height="37"  Margin="0,-5.5,0.333,294.5" Foreground="White" FontSize="16" HorizontalAlignment="Right" Grid.Column="1" d:LayoutOverrides="TopMargin, BottomMargin"  />
                    <Button  x:Name="SendButt" Content="{x:Static p:Resources.SendMessageButton}" Height="22.162"  Margin="232,333,0,9" Style="{DynamicResource MainButtons}" Click="SendButt_Click" HorizontalAlignment="Left" Width="75"/>
                    <Label x:Name="UserCommandShow" Margin="0,157,4,139" Foreground="White" FontSize="16" FontFamily="Adobe Caslon Pro Bold" HorizontalAlignment="Right"  />
                </Grid>
            </TabItem>

Answer 1

Всё плохо. Вы не пользуетесь layout management'ом, а располагаете элементы при помощи вручную жёстко заданных маргинов. Неудивительно, что ваш UI не скалируется — а что ж вы хотели? Ваш код делает ровно то, что вы ему сказали.

Для вашего случая должно быть что-то такое:

<!-- stackpanel вовсе не нужен, он не даёт растянуться  -->
<!-- маргин убрать, фиксированную высоту убрать -->
<!-- вам точно нужен null-background, или подойдёт background по умолчанию? -->
<TabControl x:Name="MainTab" Background="{x:Null}" BorderBrush="{x:Null}" Margin="5">
    <!-- это что такое за маргин? сдвиг вправо? зачем? убрать! -->
    <TabItem Header="Anastasia">
        <!-- а зачем alignment не по всей ширине? -->
        <Grid>
            <!-- так, форматируем при помощи строк в Grid -->
            <Grid.RowDefinitions>
                <!-- Этот кусок занимает как можно больше места -->
                <RowDefinition Height="*"/>
                <!-- Этот занимает сколько ему нужно, не больше  -->
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <!-- утащили вверх и поместили в первую строку -->
            <!-- ну вы поняли насчёт маргина и фиксированной ширины -->
            <!-- а зачем RenderTransformOrigin o_O -->
            <ListView x:Name="MainChat" Grid.Row="0"
                      ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                      ScrollViewer.VerticalScrollBarVisibility="Disabled"
                      Background="{x:Null}" IsEnabled="False"
                      Foreground="White" BorderBrush="{x:Null}"
                      ItemsSource="{Binding TempSelect}"/>
            <!-- а сообщение и кнопку упакуем в свой контейнер -->
            <DockPanel LastChildFill="True" Grid.Row="1">
                <Button x:Name="SendButt" Content="Send Message" DockPanel.Dock="Left"/>
                <!-- опять фиксированная ширина, убрать, лэйаутом занимается контейнер -->
                <TextBox x:Name="UserMessage"
                         Background="{x:Null}" Foreground="White" Padding="2">
                    <TextBox.BorderBrush>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="#FF00E2C3" Offset="0"/>
                            <GradientStop Color="#FF5100C7" Offset="1"/>
                        </LinearGradientBrush>
                    </TextBox.BorderBrush>
                </TextBox>
            </DockPanel>
            <!-- не знаю, куда вы хотели её поместить, разбирайтесь сами -->
            <Label x:Name="UserCommand" Foreground="White" FontSize="16"
                   HorizontalAlignment="Right" />
            <!-- и с этой тоже -->
            <Label x:Name="UserCommandShow" Foreground="White" FontSize="16"
                   FontFamily="Adobe Caslon Pro Bold" HorizontalAlignment="Right"  />
        </Grid>
    </TabItem>
</TabControl>

Получается что-то такое:

и оно правильно меняет размеры при изменении размеров окна. Стилизуйте и наводите красоту дальше сами.

READ ALSO
Windows Communication Foundation передача классов

Windows Communication Foundation передача классов

Есть некоторое WCF приложениеВ контракте на хосте WCF есть такой метод:

315
c#: Как из асинхронного кода сделать task?

c#: Как из асинхронного кода сделать task?

Здравствуйте, уважаемые

329
Как перетащить файл в консоль

Как перетащить файл в консоль

Хочу сделать считывание модулей ит

325
Разбиение файла на n частей java

Разбиение файла на n частей java

Требуется разбить файл (как правило архив) на определенное количество частейНашел готовый рабочий вариант на c#, но не смог его адаптировать...

1077