0

我用一些参数制作了一个窗口:

<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>

我想将高度和宽度更改为这些计算出的字符串。它获取用户的屏幕宽度和高度并将其除以四。

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

2 回答 2

0

如果你想这样做,你为什么不干脆

Me.Height = MsgBoxHeight
Me.Width = MsgBoxWidth

当你计算属性?

于 2013-03-10T14:46:49.283 回答
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 引入一个很好的特定于应用程序的扩展,但您需要代码才能使其工作。如果您只需要为一个窗口执行此操作,那么从代码隐藏中简单地设置窗口的 and 而不用担心标记扩展会更有Height意义Width

于 2013-03-10T15:17:21.680 回答