WP7中带有图像的消息框

时间:2011-10-17 10:46:06

标签: c# .net silverlight windows-phone-7

嗨,目前我正在使用带有Image和两个按钮的网格来显示我的WP7应用程序中的自定义消息框,其可见性首先被折叠。一切正常,但我必须在其可见性可见时禁用页面后面的所有控件。因此,启用/禁用许多控制背后的开销非常大。

对于我的要求是否有更好的解决方案:(1)显示带有图像和两个按钮或文本框的消息框;(2)它应出现在页面中间。

提前致谢!!

4 个答案:

答案 0 :(得分:3)

您可以将内置Popup controlKent Boogaart编写的附加行为一起使用,因此它的行为类似于PlacementTargetPlacement的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>