2

我想显示从右到左的MessageDialog。但似乎不存在这样的选择。

我看到了这样的问题(How to center Popup in Metro style app in c#),但我认为 RTL 是一个不同的问题。

唯一的解决方案是编写我自己的“ RTL Popup”吗?如果是这样,怎么办?

先感谢您。

我试过使用这段代码: RTL 消息代码

但结果不是 RTL: 结果 - 不是 RTL

4

3 回答 3

4

由于MessageDialog该类是密封的,并且目前无法设置属性以将方向更改为 rtl,因此您最好的选择是创建自己的。一种方法是将 a 设置Grid为页面上的最后一项,Visibility设置为Collapsed,然后Visible在需要时进行设置。一种居中的方法是这样的:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Border Grid.RowSpan="3" Background="Gray" Opacity="0.3"/> <!-- this locks the controls behind-->
    <Border HorizontalAlignment="Stretch" Background="White" Grid.Row="1" Height="300">
        <TextBlock Text="Test" HorizontalAlignment="Center" Width="300"/>
    </Border>
</Grid>

这将使您的内容垂直居中,水平居中,并防止用户与任何背景内容交互,直到Collapsed再次出现。

于 2014-06-13T20:27:50.700 回答
1

我不知道任何 C#,但是也许您可以覆盖该messageDialog.OnPaint方法。我在 VB 中这样做是为了在启用设置为 false 时在按钮上获取不同颜色的文本。

Protected Overrides Sub OnPaint(ByVal pevent As System.Windows.Forms.PaintEventArgs)
    If MyBase.Enabled Then
        If Me.Text = "" Then
            MyBase.OnPaint(pevent)
            Dim sf As SizeF = pevent.Graphics.MeasureString("Login", Me.Font, Me.Width)
            Dim ThePoint As New Point((Me.Width / 2) - (sf.Width / 2), (Me.Height / 2) - (sf.Height / 2))
            pevent.Graphics.DrawString("Login", Me.Font, Brushes.Black, ThePoint)
        Else
            MyBase.OnPaint(pevent)
        End If

    Else
        Me.Text = ""
        MyBase.OnPaint(pevent)
        Dim sf As SizeF = pevent.Graphics.MeasureString("Not Ready...", Me.Font, Me.Width)
        Dim ThePoint As New Point((Me.Width / 2) - (sf.Width / 2), (Me.Height / 2) - (sf.Height / 2))
        pevent.Graphics.DrawString("Not Ready...", Me.Font, Brushes.Red, ThePoint)
    End If

End Sub
于 2014-06-13T20:13:55.170 回答
-2

您可以在您的方法中使用下面的消息对话框。

var messageDialog = new MessageDialog(" You Can Show Message Here");
                messageDialog.Title = "Alert";
                // Add commands and set their callbacks; both buttons use the same callback function instead of inline event handlers
                messageDialog.Commands.Add(new UICommand(
                    "OK",
                    new UICommandInvokedHandler(this.CommandInvokedHandlerAddPics)));

                messageDialog.Commands.Add(new UICommand(
                    "No",
                    new UICommandInvokedHandler(this.CommandInvokedHandlerback)));

                // Set the command that will be invoked by default
                messageDialog.DefaultCommandIndex = 0;

                // Set the command to be invoked when escape is pressed
                messageDialog.CancelCommandIndex = 1;

                // Show the message dialog
                await messageDialog.ShowAsync();

确定或否按钮的方法和方法

private void CommandInvokedHandlerAddPics(IUICommand command)
    {
        if (command.Label.Equals("OK"))
        {

        }
        else if (command.Label.Equals("No"))
        {

        }
    }
于 2012-09-24T08:10:41.503 回答