Как центрировать Popup в приложении в стиле Metro в C#
Есть ли способ показать всплывающее окно в Windows 8 Metro по центру?
настройка VerticalAlignment
а также HorizontalAlignment
в "Центр", и VerticsalOffset
а также HorizontalOffset
0 вызывает всплывающее окно с левым углом в центре экрана.
Есть ли способ сделать это красиво?
Чтобы сделать эту проблему сложнее, это всплывающее окно имеет различный размер в привязанном представлении, где также должно быть по центру.
Какие-нибудь мысли?
3 ответа
Я положил это в конце главной сетки в моем Xaml, после всего остального, так что он обязательно выйдет вперед.
<Canvas x:Name="pCanvas" HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel x:Name="pStackPanel">
<TextBlock x:Name="pText" Text="Enter Name of Playlist:" Margin="25,12" Width="300" />
<TextBox x:Name="pInputBox" Margin="25,12" Width="300" />
<Button x:Name="pButton" Content="OK" Height="30" Width="100" Click="pButton_Clicked" Margin="6,12" />
</StackPanel>
</Canvas>
Надеюсь, это поможет, как насчет размещения всплывающего окна на холсте, а затем управлять холстом...
XAML
<Canvas x:Name="myCanvas"
HorizontalAlignment="Center"
Height="127"
VerticalAlignment="Center"
Width="191"/>
<Button Content="myButton"
Height="100"
Width="100"
Click="myButton_Click"/>
C#
private void myButton_Click(object sender, RoutedEventArgs e)
{
Popup myPopup = new Popup();
myPopup.IsOpen = true;
TextBox myTextbox = new TextBox();
myTextbox.Text = "Your Message Here";
myPopup.Child = myTextbox;
myCanvas.Children.Add(myPopup);
}
Просто получайте удовольствие, пытаясь...
Я также добавил следующий код в мой файл xaml.cs (код позади):
(см. xaml, который я разместил ранее)
Затем я просто подключаю событие _Tapped любой тестовой кнопки к функции myPopup() ниже.
Я до сих пор не совсем разбираюсь в Stackpanel, чтобы сконцентрировать сообщение и т. Д., Но я добираюсь до этого!
async void messageBox(String msg)
{
MessageDialog dialog = new MessageDialog(msg,"Alert");
await dialog.ShowAsync();
}
private void pButton_Clicked(object sender, RoutedEventArgs e)
{
PLPopup.IsOpen = false;
String str = pInputBox.Text;
hidePopup();
messageBox(str);
}
void hidePopup()
{
pCanvas.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
pStackPanel.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
pText.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
pInputBox.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
pButton.Visibility = Windows.UI.Xaml.Visibility.Collapsed;
}
void showPopup()
{
pCanvas.Visibility = Windows.UI.Xaml.Visibility.Visible;
pStackPanel.Visibility = Windows.UI.Xaml.Visibility.Visible;
pText.Visibility = Windows.UI.Xaml.Visibility.Visible;
pInputBox.Visibility = Windows.UI.Xaml.Visibility.Visible;
pButton.Visibility = Windows.UI.Xaml.Visibility.Visible;
}
private void myPopup(object sender, RoutedEventArgs e)
{
Brush myBrush = new SolidColorBrush(Windows.UI.Colors.Black);
topAppBar.IsOpen = false;
bottomAppBar.IsOpen = false;
myBrush.Opacity = .5;
PLPopup = new Popup();
PLPopup.IsOpen = true;
//PLPopup.Child = myTextbox;
pCanvas.Background = myBrush;
pCanvas.Children.Add(PLPopup);
pCanvas.Width = this.ActualWidth;
pCanvas.Height = this.ActualHeight;
showPopup();
}