以下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
答案 0 :(得分: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中使用。
答案 1 :(得分:0)
<DockPanel Margin="15">
<TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
<TextBox BorderThickness="1" BorderBrush="#FF000000"></TextBox>
</DockPanel>
Aero的默认样式使用ControlTemplate,它将TextBox的边框设置为使用ListBoxChrome,它在控件具有Focus或被鼠标悬停时设置一些额外的属性。
或者,Luna主题的默认样式将包含Border的BorderBrush直接绑定到TemplateBinding,这意味着它始终受到尊重(以及为什么它在XP / Luna中工作,而不是在2008或Vista中)。