我想显示从右到左的MessageDialog。但似乎不存在这样的选择。
我看到了这样的问题(How to center Popup in Metro style app in c#),但我认为 RTL 是一个不同的问题。
唯一的解决方案是编写我自己的“ RTL Popup”吗?如果是这样,怎么办?
先感谢您。
我试过使用这段代码:
但结果不是 RTL:
我想显示从右到左的MessageDialog。但似乎不存在这样的选择。
我看到了这样的问题(How to center Popup in Metro style app in c#),但我认为 RTL 是一个不同的问题。
唯一的解决方案是编写我自己的“ RTL Popup”吗?如果是这样,怎么办?
先感谢您。
我试过使用这段代码:
但结果不是 RTL:
由于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
再次出现。
我不知道任何 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"))
{
}
}