WPF文本框和边框-奇怪的调整行为

4
以下XAML代码会使得窗口在文本框周围表现异常:
```

以下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>

有没有人能够解释一下我看到的是什么?还是这只是我的想象?

就像我说的,上面的解决方法可以解决这个问题 - 我只是想了解这里发生了什么。

谢谢,

-Scott


你使用的是哪个操作系统?我在XP SP3上一开始就看到了你的第一个XAML片段中的所有黑色边框。 - micahtan
到目前为止,我已经在Server 2008和2003上复现了针对3.5和4.0 beta的问题。今晚我会尝试在Vista上测试。 - sparker
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引用放入您的项目中。
这样,您的应用程序在XP和Vista中看起来就会一样了。

0
嗯...你遇到了焦点问题吗?我加载了Aero主题,当TextBox获得焦点或鼠标悬停在TextBox上时,我看到了你的TextBox插入。当你添加第二个TextBox时,你可以很清楚地看到这一点:
<DockPanel Margin="15">
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
    <TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
</DockPanel>

Aero 的默认样式使用 ControlTemplate,该模板将 TextBox 边框设置为使用 ListBoxChrome,在控件具有焦点或鼠标悬停时看起来会设置一些额外的属性。

或者,Luna 主题的默认样式直接将包含 Border 的 BorderBrush 绑定到 TemplateBinding,这意味着始终将尊重此设置(这也是为什么它在 XP/Luna 中有效而在 2008 或 Vista 中无效的原因)。


如果我像上面那样应用Aero主题,那么您所描述的行为是完全正确的。然而,如果没有该主题,则我会看到最初描述的问题。 - sparker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接