1

ChildWindowであるポップアップがあります。そのポップアップの中に、MediaElementとビデオを制御するためのいくつかのボタンを持つUserControl(MediaPreviewView)があります。私の要件では、フルスクリーンボタンが必要であり、ユーザーがボタンをクリックするとビデオがフルスクリーンで表示されると記載されています。

私はMVVMを使用しているので、MVVMLightのメッセージングでこれを試すことにしました。ベースビューにメッセージを送信しています。そのビューのコードビハインド内に、グリッドを表示しています(非表示で、XAMLの下部にあり、zindexが高くなっています)。メッセージにMediaPreviewControlが含まれていて、Grid.Children.Add(をコントロールに設定しています。複数のことを試しましたが、ChildWindowを非表示にすることができますが、ボタンが機能しません。ChildWindowのようです。幅と高さが0であったとしても、ボタンの上にあります。より良いMediaPreviewViewをフルスクリーンにするための実行可能なアプローチ?

public class MediaPreviewFullScreenMessage
{
    public MediaPreviewView PreviewView { get; set; }
    public ChildWindow ContainerChildWindow { get; set; }
    public bool ChangeToFullScreen { get; set; }
}

// Register for FullScreen media preview
Messenger.Default.Register<MediaPreviewFullScreenMessage>(this,
(fullScreenMessage) =>
{
  this.fullScreenHolderGrid.Visibility = fullScreenMessage.ChangeToFullScreen ? Visibility.Visible : Visibility.Collapsed;
  this.fullScreenHolderGrid.Children.Clear();
  if (fullScreenMessage.ChangeToFullScreen)
  {
// I've tried, Visibility, width and height = 0 on the fullScreenMessage.ContainerChildWindow, even a TranslateTransform
....
}
});
4

1 に答える 1

0

を単純に最大化するのはChildWindowどうですか?フルスクリーンの背後Buttonで、

    private void FullScreenButton_Click(object sender, System.Windows.RoutedEventArgs e)
    {
        // get the explorer window size
        double height = App.Current.Host.Content.ActualHeight;
        double width = App.Current.Host.Content.ActualWidth;

        // need to make it a little bit smaller or it won't resize
        this.Height = height - 1;
        this.Width = width - 1;

        // need to update the layout here
        this.UpdateLayout();

        // the following code repositions the child window
        var root = VisualTreeHelper.GetChild(this, 0) as FrameworkElement;
        if (root == null)
        {
            return;
        }

        var contentRoot = root.FindName("ContentRoot") as FrameworkElement;
        if (contentRoot == null)
        {
            return;
        }

        var group = contentRoot.RenderTransform as TransformGroup;
        if (group == null)
        {
            return;
        }

        TranslateTransform translateTransform = null;
        foreach (var transform in group.Children.OfType<TranslateTransform>())
        {
            translateTransform = transform;
        }

        if (translateTransform == null)
        {
            return;
        }

        // reset transform
        translateTransform.X = 0.0;
        translateTransform.Y = 0.0;
    }

アップデート

ChildWindowデフォルト スタイルでは、 byの位置を設定するthis がGrid呼び出されます。そのため、 をリセットして左上にする必要があります。ContentRootChildWindowRenderTransformTranslateXTranslateY

                        <Grid x:Name="ContentRoot" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" Height="{TemplateBinding Height}" RenderTransformOrigin="0.5,0.5" VerticalAlignment="{TemplateBinding VerticalAlignment}" Width="{TemplateBinding Width}">
                            <Grid.RenderTransform>
                                <TransformGroup>
                                    <ScaleTransform/>
                                    <SkewTransform/>
                                    <RotateTransform/>
                                    <TranslateTransform/>
                                </TransformGroup>
                            </Grid.RenderTransform>
于 2011-11-22T06:02:48.133 に答える