1

「 Windows Aero Glass のバックグラウンドが休止状態の後に壊れています。どうすれば解決できますか? 」で説明したように、Aero-Glass をバックグラウンドとして使用してフォームを作成しています。ウィンドウがResizeMode="NoResize" SizeToContent="WidthAndHeight"設定されました。

グリッドがあり、いくつかの固定列と 1 つの要素を持つ可変列があります。この要素は、表示され、折りたたまれるように設定されています。私のウィンドウは、自動的に拡大および縮小する必要があります。これは完全に機能します。

私の問題は、サイズを変更した後、すべてのコントロールがすべての次元で約 1 ピクセルぼやけてしまうことです。要素を視覚的に切り替えて以前のサイズを再生成した後、このぼやけは消えます。ウィンドウがプログラムでサイズ変更されるたびに表示されることをすでに知っています。ユーザーがサイズを変更した場合、コーナーをドラッグするだけで (もちろん なしでResizeMode="NoResize") コントロールはクリアなままです。

SnapsToDevicePixels="True"この動作には影響がないようです。

Aero グラスが無効になっている場合、すべてが完全に機能し、クリアなままです。

あなたの提案をお待ちしております。

前もって感謝します。


編集:

例:

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.
}
4

1 に答える 1

0

プログラムでサイズを変更した後、 Invalidate()メソッドを使用してウィンドウまたはコントロールを再描画できます...サイズ変更のメソッドをオーバーライドすると、簡単になります。

于 2011-05-12T14:21:50.863 に答える