Элементы управления размыты над аэродинамическим стеклом после изменения размера

Я создаю форму, используя аэростекло в качестве фона, как я описал в "Фон 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.
}

person Legy    schedule 11.05.2011    source источник
comment
Можете ли вы предоставить небольшой тестовый пример, демонстрирующий проблему?   -  person Ritch Melton    schedule 12.05.2011
comment
Конечно, но на самом деле для моей цели я просто сделал свой контент статичным, а мой элемент всегда видимым... Но если бы вы могли помочь мне найти решение моей проблемы, это помогло бы мне предоставить лучший и более простой в использовании графический интерфейс. ! Пример последует через несколько минут.   -  person Legy    schedule 12.05.2011
comment
Я смог указать, что эта проблема появляется только на моем ноутбуке с разрешением 1920x1080px. в качестве одного из самых коротких примеров см. редактирование выше.   -  person Legy    schedule 12.05.2011


Ответы (1)


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

person Matt    schedule 12.05.2011