Ширина диалогового окна дизайна переплетного материала wpf, меньше или превышает ширину окна - PullRequest
3 голосов
/ 23 апреля 2020

Я хочу установить ширину диалогового окна, чтобы охватить всю родительскую страницу, в этом случае UserControl и, следовательно, окно. Для этого я попытался привязать ширину диалогового окна дизайна материала к ActualWidth в UserControl.

Он работал нормально, пока окно не развернуто.

Когда он развернут, ширина диалогового окна меньше, чем у UserControl:

Я пытался привязать ширину UserControl к ActualWidth окна (Width="{Binding ActualWidth, ElementName=win}"), но это было хуже, так как диалоговое окно превышает окно: Чего мне не хватает?

TestWindow.xaml:

<Window x:Class="Wpf.Views.TestWindow" x:Name="win"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Wpf.Views"
    mc:Ignorable="d"

    Title="TestWindow" Height="450" Width="800">
<Grid>
    <local:MyDialog/> <!-- Width="{Binding ActualWidth, ElementName=win}" -->
    </Grid>
</Window>

MyDialog.xaml

<UserControl x:Class="Wpf.Views.MyDialog" x:Name="self"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
         MinWidth="300"  MinHeight="300" mc:Ignorable="d">
<Grid>
    <materialDesign:DialogHost Identifier="1" BorderBrush="{DynamicResource MaterialDesignDivider}" Height="130" 
    Width="{Binding ActualWidth, ElementName=self}" HorizontalAlignment="Center">
        <Button Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}" Width="130">
            Open
        </Button>
        <materialDesign:DialogHost.DialogContent>
            <StackPanel Orientation="Vertical" Height="130" Width="{Binding ActualWidth, ElementName=self}">
                    <TextBlock Text="Work in Progress" HorizontalAlignment="Center"/>
                    <ProgressBar Style="{DynamicResource MaterialDesignCircularProgressBar}"
      HorizontalAlignment="Center" Margin="16" IsIndeterminate="True" Value="0" />
                    <Button Style="{StaticResource MaterialDesignFlatButton}"
      IsCancel="True" Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}" HorizontalAlignment="Center">
                        CANCEL
                    </Button>
                </StackPanel>
        </materialDesign:DialogHost.DialogContent>
    </materialDesign:DialogHost>
    </Grid>
</UserControl>

Screen edge

1 Ответ

2 голосов
/ 23 апреля 2020

Я подозреваю, что вы бы увидели похожие проблемы, если бы окно было расположено рядом с краем экрана в дополнение к тому, чтобы быть развернутым. Причина в том, что элемент управления DialogHost содержит свойство DialogMargin , которое по умолчанию равно 35 со всех сторон. Для ваших целей вы, вероятно, хотите установить его на 0.

...