4

次の XAML は、テキスト ボックスの周りに奇妙な動作をするウィンドウを生成します。

<Window x:Class="WpfSandbox.CuriousExample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="CuriousExample" Height="300" Width="300">
    <DockPanel Margin="15">
        <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
    </DockPanel>
</Window>

少なくとも私の限られたテスト中に何が起こるかというと、テキストボックスが挿入された境界線パターン (上/左は黒、右/下は灰色) でレンダリングされます。ただし、元の位置以外の位置にサイズを変更すると、テキスト ボックスの境界線全体が黒くなります。フォームが最初にロードされたときの正確な画面上のピクセル数にウィンドウを戻すと、ウィンドウは再び挿入されます。

このコードで問題を簡単に修正できるため、ピクセルスナップではないと思います。

<Window x:Class="WpfSandbox.CuriousExample"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="CuriousExample" Height="300" Width="300">
    <DockPanel Margin="15">
        <Border BorderThickness="1" BorderBrush="#FF000000">
            <TextBox BorderThickness="0" ></TextBox>
        </Border>
    </DockPanel>
</Window>

私が見ているものについて、あえて説明してくれる人はいますか? それともすべて頭の中にあるのですか?

私が言ったように、上記の回避策はこの問題を解決することができます - ここで何が起こっているのかを理解しようとするだけです.

ありがとう、

-スコット

4

2 に答える 2

0

アプリケーションに Vista テーマ (aero) を強制的に使用させることができます

app.xaml を開き、次のように入力します。

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Aero;V3.0.0.0;31bf3856ad364e35;component/themes/aero.normalcolor.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

PresentationFramework.Aero 参照をプロジェクトに入れることを忘れないでください。

これにより、Vista のように XP でアプリケーションを使用できます。

于 2009-06-15T22:45:04.110 に答える
0

うーん...フォーカスの問題が発生していますか? Aero テーマを読み込んだところ、TextBox にフォーカスがあるか、マウスオーバーされたときに、TextBox のインセットが表示されます。次のように 2 つ目の TextBox を追加すると、これがはっきりとわかります。

<DockPanel Margin="15">
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
</DockPanel>

Aero のデフォルトの Style は、TextBox の境界線を設定する ControlTemplate を使用して、ListBoxChrome を使用します。ListBoxChrome は、コントロールにフォーカスがあるとき、またはマウスオーバーされたときにいくつかの追加のプロパティを設定するように見えます。

あるいは、Luna テーマのデフォルトの Style は、含まれている Border の BorderBrush を TemplateBinding に直接バインドします。これは、これが常に尊重されることを意味します (そして、2008 または Vista ではなく XP/Luna で機能する理由)。

于 2009-06-15T23:02:48.093 に答える