Как использовать справа налево в Popup.MessageDialog (Metro)

Я хочу показать справа налево MessageDialog. но, похоже, такой опции не существует.

Я видел такой вопрос ( Как центрировать Popup в приложении в стиле Metro на C#), но я думаю, что RTL - это другая проблема.

это единственное решение, чтобы написать свой собственный "RTL Popup"? если да, то как?

заранее спасибо.

Я пытался использовать этот код:Код сообщения RTL

но результат НЕ RTL:результат - не RTL

3 ответа

Решение

Так как MessageDialog класс запечатан, и в настоящее время нет способа установить свойство для изменения направления на rtl, лучшим вариантом будет создать свой собственный. Одним из способов сделать это было бы установить 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 снова.

Я не знаю 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

Вы можете использовать ниже диалог сообщений в вашем методе.

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"))
        {

        }
    }
Другие вопросы по тегам