我在边缘和填充中鬼混,发现负值是可以接受的,并在适当的情况下产生很好的效果。例如,如果您有一个带有填充对象的边框,并且您希望填充的对象颜色超出边框。还有其他人吗?
答案 0 :(得分:18)
调试WPF绑定。
为绑定属性添加跟踪:
<Window …
xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase"/>
<TextBlock Text="{Binding Path=Caption,
diagnostics:PresentationTraceSources.TraceLevel=High}"…/>
您将在输出窗口中获得有关绑定的更多详细信息:
PropertyChanged event from SomeObject (hash=1)
SetValue at level 0 from SomeObject (hash= 1) using RuntimePropertyInfo(Field):
'False'
TransferValue - got raw value 'False'
TransferValue - using final value 'False'
// EDIT 更多信息here。
爱丽儿
答案 1 :(得分:12)
与3.5 SP1一起提供的WPF的新功能是能够在绑定时格式化字符串。它消除了IValueConverter
对这种常见场景的使用。
以下是我从this blog post
<TextBox Text="{Binding Path=Double, StringFormat=F3}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: {0:C}}"/>
<TextBox Text="{Binding Path=Double, StringFormat=Amount: \{0:C\}}"/>
<TextBox>
<TextBox.Text>
<Binding Path="Double" StringFormat="{}{0:C}"/>
</TextBox.Text>
</TextBox>
答案 2 :(得分:10)
Visibility
是一个三态System.Windows.Visibility枚举:
答案 3 :(得分:7)
设置提供视觉提示的调试样式:
<Window.Resources>
<Style x:Key="DebugGrid" TargetType="Grid">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ShowGridLines" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Name="Grid"
Style="{StaticResource DebugGrid}"
Background="Black">...
答案 4 :(得分:5)
在控件的内容中包含花括号。
<Button Content="{}{This is not a markup extension.}"/>
答案 5 :(得分:5)
IsMouseOver
和IsMouseDirectlyOver
是不同的事件。 IsMouseOver
响应控件内的所有鼠标移动及其子项。仅当光标位于控件本身上时,IsMouseDirectlyOver
才会响应。例如,如果边框中包含标签,则只有当光标位于边框本身但未覆盖包含的标签上时,边框的IsMouseDirectlyOver
事件才会触发。
答案 6 :(得分:3)
以百分比计算可用房地产:
<Grid.RowDefinitions>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.25*"/>
<RowDefinition Height="0.25*"/>
</Grid.RowDefinitions>
编辑:
这有效但不表示*参数如何起作用。这样:
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
提供相同的功能。如果您想要除高度相等的行之外的其他东西,您可以使用:
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="2*"/>
<RowDefinition Height="3*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
将可用高度除以10并保持每行的相对高度。或者,值可以是0.1,0.2,0.3和0.4或任何比例值。
答案 7 :(得分:3)
Padding
和Margin
,其类型为“厚度”。它们可以输入为:
答案 8 :(得分:3)
为GridSplitter
提供唯一的行或列,以确保其未被其他控件隐藏,并按预期运行。
答案 9 :(得分:2)
该属性为 BorderThickness 。无论您键入BorderWidth多少次,它都无法正常工作!
答案 10 :(得分:2)
在运行时根据另一个控件确定一个控件的尺寸。
<... Width="{Binding ElementName=referenceElement, Path=ActualWidth}" ../>
这也可以通过Height/MaxHeight
等完成。
答案 11 :(得分:1)
在内容中插入双引号:
<Button Name="Button"
Background="AntiqueWhite"
Content="{}{Background="AntiqueWhite"}"/>
答案 12 :(得分:0)
默认情况下保留Grid
或使用Background
画笔设置的Transparent
将不会触发IsMouseOver
事件,除非光标位于包含控件之上。要确保通过Grid
本身触发事件,请通过将Transparency
设置为容器Background
颜色来模拟Background
。
答案 13 :(得分:0)
将背景设置为Transparent的控件不会触发IsMouseOver或IsMouseDirectlyOver事件。例如,如果边框背景设置为透明但BorderBrush =蓝色且BorderWidth是&lt;&gt; 0,MouseOver事件将在Border本身上方触发,但不会在控件内部触发。
答案 14 :(得分:0)
将Code Behind中的属性设置为DynamicResource:
Border_Toolbar.SetResourceReference(BackgroundProperty, "Brush_ToolbarBackground")