嗨,目前我正在使用带有Image和两个按钮的网格来显示我的WP7应用程序中的自定义消息框,其可见性首先被折叠。一切正常,但我必须在其可见性可见时禁用页面后面的所有控件。因此,启用/禁用许多控制背后的开销非常大。
对于我的要求是否有更好的解决方案:(1)显示带有图像和两个按钮或文本框的消息框;(2)它应出现在页面中间。
提前致谢!!
答案 0 :(得分:3)
您可以将内置Popup control与Kent Boogaart编写的附加行为一起使用,因此它的行为类似于PlacementTarget
和Placement
的WPF Popup控件:
<Popup b:PopupPlacement.PlacementTarget="{Binding ElementName=someElement}">
<b:Popup.PreferredOrientations>
<b:PopupOrientationCollection>
<b:PopupOrientation Placement="Top" HorizontalAlignment="Center"/>
<b:PopupOrientation Placement="Bottom" HorizontalAlignment="Center"/>
<b:PopupOrientation Placement="Right" VerticalAlignment="Center"/>
<b:PopupOrientation Placement="Right" VerticalAlignment="TopCenter"/>
</b:PopupOrientationCollection>
</b:Popup.PreferredOrientations>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0">My popup's contents</TextBlock>
<Image Grid.Row="1" .... />
</Grid>
</Popup>
答案 1 :(得分:0)
使用Coding4Fun工具包的自定义对话框功能 http://coding4fun.codeplex.com/
除了标准的Silverlight Toolkit之外,该工具包还有许多可用的控件,应该可以满足您的需求。
答案 2 :(得分:0)
试试这个,可能对你有所帮助
StackPanel st = new StackPanel();
StackPanel st1 = new StackPanel();
Image image = new Image();
image.Height = 300;
image.Width = 300;
image.Source = new BitmapImage(new Uri("/PhoneApp1;component/Koala.jpg", UriKind.Relative));//Build Action=Resource
Button btnok = new Button();
btnok.Content = "Ok";
btnok.Click += new RoutedEventHandler(btnok_Click);
Button btncancel = new Button();
btncancel.Content = "Cancel";
btncancel.Click += new RoutedEventHandler(btncancel_Click);
st1.Orientation = System.Windows.Controls.Orientation.Horizontal;
st1.Children.Add(btnok);
st1.Children.Add(btncancel);
st.Children.Add(image);
st.Children.Add(st1);
ContentPanel.Children.Add(st);
答案 3 :(得分:0)
在这种情况下我做的是向具有透明背景和IsHitTestVisible = True的页面添加网格或边框。然后,您可以将图像等添加到父控件(网格/边框)。 您需要确保父控件覆盖整个页面,然后将对话框置于此控件的中心。当您切换父控件的可见性时,透明背景将覆盖页面上的其他控件,从而有效地禁用它们。
这是一个例子。 uxMessageGrid是父控件,Border是实际的对话框。然后,您只需要确保这是添加到根元素的最后一个控件,并在代码中切换uxMessageGrid.Visibility。
<Grid x:Name="uxLayoutRoot">
<Other Controls />
<Grid x:Name="uxMessageGrid"
Visibility="Collapsed"
Background="Transparent"
IsHitTestVisible="True">
<Border CornerRadius="0"
BorderThickness="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
BorderBrush="{StaticResource PhoneForegroundBrush}"
Background="{StaticResource PhoneBackgroundBrush}">
<TextBlock Margin="15"
Text="Message..."
TextWrapping="Wrap"/>
</Border>
</Grid>
</Grid>