在XAML中使用字符串作为窗口高度

时间:2013-03-10 14:42:44

标签: wpf string xaml height width

我创建了一个带有一些参数的窗口:

<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 }" ??

2 个答案:

答案 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引入一个很好的特定于应用程序的扩展,但是您需要代码才能使用它。如果你只需要为一个窗口执行此操作,那么从代码隐藏设置窗口的HeightWidth更有意义,而不需要使用标记扩展。