Изменение размера окна WPF при прокрутке ListBox - PullRequest
0 голосов
/ 13 июля 2010

Я хочу, чтобы мой размер окна для элементов в списке. Список содержит строки переменной длины (от 20 до 120 символов). Когда я прокручиваю список и более длинные строки в списке, прокручиваем с экрана, список сжимается, и мое окно сжимается вместе с ним. Как я могу сохранить размер окна фиксированным, когда пользователь прокручивает его, и при этом все еще иметь размер окна, изначально равный содержанию. Знаешь, торт и ешь это тоже.

<Window x:Class="MyApp.MyDialog
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:MyApp"
xmlns:sys="clr-namespace:System;assembly=mscorlib"        
Title="My Dialog" MaxHeight="600" SizeToContent="WidthAndHeight" ShowInTaskbar="False" Width="Auto" Height="Auto" Loaded="Window_Loaded">

<Grid Width="Auto" Height="Auto" Margin="5,5,5,5">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition></RowDefinition>
        <RowDefinition Height="48" ></RowDefinition>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <StackPanel Orientation="Horizontal" Grid.Row="0" >
        <TextBlock>Total: </TextBlock>
        <TextBlock Text="{Binding myData.Count}"></TextBlock>
    </StackPanel>
    <ListBox Grid.Row="1" ItemsSource="{Binding myData}"/>
    <Button Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Center" Height="28" Click="buttonOK_Click" Margin="0,5,0,5" IsDefault="True" Name="buttonOK" Width="75">OK</Button>
</Grid>

Ответы [ 2 ]

0 голосов
/ 08 октября 2013

Иногда мне требовалось, чтобы размер окна изначально соответствовал его содержанию, а затем оставлял размер фиксированным, если явно не изменен размер. Как правило, я просто перехватываю событие ContentRendered окна и очищаю свойство SizeToContent в обработчике события (а также отсоединяю событие). Это гарантирует, что макет полностью завершен, окно было показано и его границы полностью рассчитаны к тому времени, когда вы вернетесь к фиксированному размеру.

Это не лучшее решение в мире, и оно ломается в тех случаях, когда ваш контент не полностью доступен, когда происходит событие ContentRendered. Наиболее вероятный пример, о котором я могу подумать, будет, если данные в вашей модели представления еще не доступны, и, следовательно, ваше представление еще не заполнено полностью. Это может не быть проблемой для вас - это зависит от вашего дизайна и от того, выполняете ли вы какую-либо отложенную / асинхронную загрузку данных. Но он работает в более простых сценариях и обладает простотой реализации.

0 голосов
/ 13 июля 2010

Я думаю, вам следует удалить свойство sizetocontent и программно изменить размер окон по своему усмотрению на основе содержимого списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...