答案 0 :(得分:1)
此 converter 为我工作。
在 DialogPresenter.Generic.xaml
中<controls:DragCanvas Name="DialogCanvas">
<Grid x:Name="Dialog" ...>
<Canvas.Top>
<MultiBinding Converter="{StaticResource CenterConverter}" ConverterParameter="top">
<Binding ElementName="DialogCanvas" Path="ActualWidth" />
<Binding ElementName="DialogCanvas" Path="ActualHeight" />
<Binding ElementName="Dialog" Path="ActualWidth" />
<Binding ElementName="Dialog" Path="ActualHeight" />
</MultiBinding>
</Canvas.Top>
<Canvas.Left>
...
</Canvas.Left>
答案 1 :(得分:0)
有几种方法可以让对话框居中。
在DialogPresenter类中,更新Show()方法以设置window.WindowStartupPosition = WindowStartupLocation.CenterScreen。
编写自定义TriggerAction并覆盖Invoke以执行以下操作。
var window = Window.GetWindow(this.AssociatedObject); window.WindowStartupLocation.CenterScreen
然后将触发器操作附加到触发器部分中的ControlTemplate。您可以使用LoadedEvent并调用TriggerAction来使用EventTrigger。
注意:如果你有ExpressionBlend,它会将TriggerActions拖动到UI很容易,因为它会为你编写EventTrigger部分。