Элементы управления размыты на аэростекле после изменения размера - PullRequest
1 голос
/ 12 мая 2011

Я создаю форму, используя аэро-стекло в качестве фона, как я описал в " Фон Windows Aero Glass ломается после спящего режима. Как я могу решить эту проблему? ".В окне установлено ResizeMode="NoResize" SizeToContent="WidthAndHeight".

Существует таблица с несколькими фиксированными столбцами и одним переменным столбцом с элементом.Этот элемент установлен, чтобы быть видимым и свернутым.Мое окно должно расширяться и сжиматься самостоятельно, что работает отлично.

Моя проблема в том, что после изменения размера все элементы управления размываются примерно на 1 пиксель в каждом измерении.После восстановления предыдущего размера путем визуального переключения элементов в состояние размытия исчезает.Я уже знал, что он появляется каждый раз, когда окно изменено программно.Если пользователь изменяет размер, просто перетаскивая угол (конечно, без ResizeMode="NoResize"), элементы управления остаются свободными.

SnapsToDevicePixels="True", кажется, не влияет на это поведение.

Если Aero Glass отключен, все работает отлично и остается чистым.

Я с нетерпением жду ваших предложений.

Заранее спасибо.

Редактировать:

Пример:

XAML:

<Window x:Class="glass_sample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="SampleWindow"
        ResizeMode="NoResize"
        SizeToContent="WidthAndHeight"
        Loaded="Window_Loaded"
        Background="{StaticResource {x:Static SystemColors.ActiveCaptionBrushKey}}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="80" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Button  Content="Toggle"
                 Click="Button_Click" />
        <Button  IsEnabled="False"
                 Grid.Column="1"
                 Margin="5"
                 Content="Expanded"
                 Visibility="Collapsed"
                 Name="expand" />
    </Grid>
</Window>

CS:

public MainWindow()
{
    InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    this.expand.Visibility = (this.expand.Visibility == System.Windows.Visibility.Visible) ? System.Windows.Visibility.Collapsed : System.Windows.Visibility.Visible;
}

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    GlassHelper.GlassFrame(this);
    // this is my aero-glass class. It extends glass over clientarea and repeats
    // this when WM_THEMECHANGED or WM_DWMCOMPOSITIONCHANGED is recieved.
}

1 Ответ

0 голосов
/ 12 мая 2011

Вы можете использовать Invalidate () метод, чтобы перерисовать окно или элемент управления после того, как вы измените его размер программным способом ... Возможно, переопределить метод изменения размера будет проще.

...