我在玩弄边距和内边距时发现负值是可以接受的,并且在适当的情况下可以产生不错的效果。例如,如果您有一个带有填充对象的边框,并且您想要填充对象的颜色超出边框。还有其他人有类似的经验吗?
调试 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'
//编辑 更多信息在这里。
Ariel
WPF在3.5 SP1中引入了一项新功能,即在绑定时格式化字符串。这消除了在常见情况下使用 IValueConverter
的需要。以下是一些示例,摘自这篇博客文章
<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>
Visibility
是一个三态枚举类型 System.Windows.Visibility:
设置一个提供视觉提示的调试样式:
<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">...
在控件的内容中包含花括号。
<Button Content="{}{This is not a markup extension.}"/>
IsMouseOver
和IsMouseDirectlyOver
是不同的事件。 IsMouseOver
响应控件及其子控件内所有鼠标移动,而IsMouseDirectlyOver
仅在光标直接位于控件上方时响应。例如,如果您在边框中包含一个标签,则只有当光标位于边框本身而非包含的标签上时,IsMouseDirectlyOver
事件才会被触发。
将可用房地产计算为百分比:
<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或任何比例值。
这个属性是BorderThickness。无论您输入多少次BorderWidth,它都不会起作用!
Padding
和Margin
使用逗号分隔的语法输入,类型为Thickness。可以输入如下:
为GridSplitter
提供一个独特的行或列,以确保它不会被其他控件隐藏,并且按预期工作。