【问题标题】:wpf binding material design dialog width, is either smaller or exceed window widthwpf绑定材料设计对话框宽度,小于或超过窗口宽度
【发布时间】:2020-04-23 13:21:09
【问题描述】:

我想设置对话框的宽度以覆盖整个父页面,在这种情况下是 UserControl 和窗口。为此,我尝试将材料设计对话框的宽度绑定到 UserControl 的ActualWidth

只要窗口未最大化,它就可以正常工作。

当它最大化时,对话框的宽度小于用户控件的宽度:

我尝试将 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>

【问题讨论】:

  • 我尝试将自定义用户控件(带有标签的网格)绑定到WindowActualWidth 属性,它对我来说很好用。 1. 你用的是什么框架版本? 2. 这是DialogHost 控件的问题吗?只用一个标签试试,看看你是否得到相同的结果。
  • .Net Framework 4.7.2,我只是尝试使用标签作为DialogContent,完全相同的行为。
  • 如果您完全摆脱材料设计控制而只使用&lt;Grid&gt;&lt;Label/&gt;&lt;/Grid&gt; 会发生什么。这是奇怪的行为。
  • 对不起,我没有明白你的意思,问题都是关于材料设计对话框(弹出)的使用。

标签: c# wpf xaml wpf-controls material-design-in-xaml


【解决方案1】:

我怀疑如果窗口除了被最大化之外还被放置在屏幕边缘旁边,您会看到类似的问题。原因是 DialogHost 控件包含一个DialogMargin 属性,该属性在所有方面都默认为 35。出于您的目的,您可能希望将其设置为 0。

【讨论】:

  • 确实,当我靠近屏幕边缘时,甚至当我将窗口滑动到边缘之外时,对话框完全以相同的数量进入out of the window
  • 我设置了DialogMargin =0,它工作正常,只是当您将窗口滑出屏幕时,对话框会继续向相反方向移动;和次要的一点我不知道为什么在快速调整窗口大小时,对话框宽度没有足够快地跟随/更新,以至于我们无法注意到下面的暗层。
猜你喜欢
  • 2021-06-05
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2015-12-25
  • 2018-12-18
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
相关资源
最近更新 更多