我创建了一个带有一些参数的窗口:
<Window x:Class="MsgBox"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MsgBox" Height="300" Width="500" Topmost="True" WindowStartupLocation="CenterScreen" WindowStyle="None" Loaded="MsgBox_Loaded">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
</Grid.ColumnDefinitions>
</Grid>
</Window>
我想将高度和宽度更改为这些计算出的字符串。它获取用户的屏幕宽度和高度并将其除以4。
Public ReadOnly Property PrimaryScreenWidth As Double
Get
Return System.Windows.SystemParameters.PrimaryScreenWidth
End Get
End Property
Public ReadOnly Property PrimaryScreenHeight As Double
Get
Return System.Windows.SystemParameters.PrimaryScreenHeight
End Get
End Property
Private MsgBoxWidth As String = PrimaryScreenWidth \ 4
Private MsgBoxHeight As String = PrimaryScreenHeight \ 4
如何将其设置到我的窗口?
Height="{x:static MsgBoxHeight }" Width="{x:static MsgBoxWidth }" ??
答案 0 :(得分:0)
如果你想这样做,为什么不简化
Me.Height = MsgBoxHeight
Me.Width = MsgBoxWidth
计算属性时?
答案 1 :(得分:0)
你正在展示的语法,大概是想要的,用花括号:
Height="{x:static MsgBoxHeight }" Width="{x:static MsgBoxWidth }"
称为标记扩展语法,它允许使用标记扩展类来设置属性值。这是你如何做到的。第一步,创建标记扩展类:
Public Class MsgBoxHeight
Inherits System.Windows.Markup.MarkupExtension
Public Sub New()
End Sub
Public Overrides Function ProvideValue(serviceProvider As IServiceProvider) As Object
Return System.Windows.SystemParameters.PrimaryScreenHeight / 4
End Function
End Class
接下来,您将向xmlns:local="clr-namespace=YourNamespace"
添加<Windows>
,然后您就可以像这样使用它:Height="{local:MsgBoxHeight}"
。
Window的完整XAML如下所示:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication6"
Title="MainWindow" Height="{local:MsgBoxHeight}" Width="525">
<Grid>
</Grid>
</Window>
使用标记扩展意味着您正在通过代码进行。您正在为XAML引入一个很好的特定于应用程序的扩展,但是您需要代码才能使用它。如果你只需要为一个窗口执行此操作,那么从代码隐藏设置窗口的Height
和Width
更有意义,而不需要使用标记扩展。