MaterialDesignXamlToolkit wpf dialoghost buttons are disabled when opened

情到浓时终转凉″ 提交于 2019-12-11 09:49:36

问题


I am using the MaterialDesignThemes nuget package along with the Mahapps.Metro package

I have this DialogHost

<material:DialogHost Name="PopupAddCustom" HorizontalAlignment="Center" VerticalAlignment="Center" IsOpen="False" >
    <material:DialogHost.DialogContent>
        <StackPanel Margin="16" Orientation="Vertical">
            <Label Content="Add custom date" FontSize="16" />
            <DatePicker />
            <StackPanel Orientation="Horizontal">
                <Button Content="ACCEPT" Style="{DynamicResource MaterialDesignFlatButton}" IsDefault="True" Margin="0,8,8,0" Command="material:DialogHost.CloseDialogCommand" CommandParameter="True" />
                <Button Content="CANCEL" Style="{DynamicResource MaterialDesignFlatButton}" IsCancel="True" Margin="0,8,8,0" Command="material:DialogHost.CloseDialogCommand" CommandParameter="False" />
            </StackPanel>
        </StackPanel>
    </material:DialogHost.DialogContent>
</material:DialogHost>

That is being openend by this button

<Button MinWidth="120" Margin="10" Style="{StaticResource MaterialDesignRaisedAccentButton}" ToolTip="Add in a new custom date." Command="{x:Static material:DialogHost.OpenDialogCommand}" CommandTarget="{Binding ElementName=PopupAddCustom}"  >
    <StackPanel Orientation="Horizontal">
        <Rectangle Width="20" Height="20" Fill="{Binding RelativeSource={RelativeSource AncestorType=Button}, Path=Foreground}">
            <Rectangle.OpacityMask>
                <VisualBrush Stretch="Fill" Visual="{StaticResource fa_plus}" />
            </Rectangle.OpacityMask>
        </Rectangle>
        <TextBlock Margin="10,0,0,0" VerticalAlignment="Center" Text="Custom" />
    </StackPanel>
</Button>

However when this dialog gets opened the ACCEPT and CANCEL buttons are disabled. So to check if anything was wrong I manually opened this dialog from the my MainWindow constructor like this

this.Loaded += delegate(object sender, RoutedEventArgs args)
{
    this.PopupAddCustom.IsOpen = true;
};

When I open the dialog like this the button are in working order, am I missing something obvious here?


回答1:


The problem was resolved by setting a command target for the buttons like this

 CommandTarget="{Binding ElementName=PopupAddCustom}"



回答2:


To save someone elses time: I had dialog content specified as command parameter and specifying CommandTarget did not help me.

What helps in my case, is to put CommandParameter before Command.

You can achieve that by passing content as resource.

Example:

Before:

<Button 
   ... 
   Command="{x:Static material:DialogHost.OpenDialogCommand}"
   >
   <Button.CommandParameter>
       <Grid>
         ** Dialog content **
       </Grid>
   </Button.CommandParameter>
   ** Button content **
</Button>

After:

<UserControl.Resources>
  <Grid x:Key="MyDialogContent">
    ** Dialog content **
  </Grid>
</UserControl.Resources>

<Button 
   ... 
   CommandParameter="{StaticResource MyDialogContent}"
   Command="{x:Static material:DialogHost.OpenDialogCommand}"
   >
   ** Button content **
</Button>

And dialoghost buttons were not disabled anymore.



来源:https://stackoverflow.com/questions/41781005/materialdesignxamltoolkit-wpf-dialoghost-buttons-are-disabled-when-opened

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!