按钮 MVVM 中的按钮.如何点击内部按钮



>我在大按钮内有一个'加号'按钮(见图(。如何执行"加号"按钮的命令。在我的示例中,"加号"按钮是CreateNewFolderButton(第一种样式(,位于MakeNewFolderButton(第二种样式(的Grid.Column=2中。


修补WindowChrome.IsHitTestVisibleInChromeIsHitTestVisible无济于事。如何访问"加号">按钮并使用 MVVM 执行其命令?

<Style x:Key="CreateNewFolderButton" TargetType="{x:Type Button}" BasedOn="{StaticResource HoverLess}">
    <Setter Property="ToolTip" Value="Create Folder"/>
    <Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True"/>
    <Setter Property="IsHitTestVisible" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ButtonBase}">
                <Grid >
                    <Ellipse Width="{StaticResource WidthNavigationAndCreation}" Height="{StaticResource HeightNavigationAndCreation}" />
                    <Ellipse Width="{StaticResource WidthNavigationAndCreation}" Height="{StaticResource HeightNavigationAndCreation}" x:Name="image" >
                        <Ellipse.Fill>
                            <ImageBrush  ImageSource="{DynamicResource AddFolder}" />
                        </Ellipse.Fill>
                    </Ellipse>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Fill"  TargetName="image" Value="{DynamicResource IBAddFolderMouseOver}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style x:Key="MakeNewFolderButton"  TargetType="{x:Type Button}" BasedOn="{StaticResource FolderFileButtons}">
    <Setter Property="IsHitTestVisible" Value="False"/>
    <Setter Property="WindowChrome.IsHitTestVisibleInChrome" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate  TargetType="{x:Type ButtonBase}">
                <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="0 0 0 0.5">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Image Width="{StaticResource WidthFolderAndFilesIcon}"
                               Height="{StaticResource HeightFolderAndFilesIcon}" Source="/Images/FolderAndFiles/BlackEmptyFolder48x48.png"/>                            
                        <TextBox Grid.Column="1" Style="{StaticResource TextBoxEnterFileCreation}"
                                 Tag="New Folder Name"
                                 Text="{Binding RelativeSource={RelativeSource AncestorType=Window},
                                        Path=DataContext.NewFolderName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        <Button Grid.Column="2" Style="{StaticResource CreateNewFolderButton}"
                                Command="{Binding RelativeSource={RelativeSource AncestorType=Window}, Path=DataContext.MakeFolder}"/>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" TargetName="border" Value="{StaticResource ButtonBackgroundMouseOver}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

大按钮内的"加号"按钮

正如我在评论中所写的,这段代码有效:

<Button Content="Outer button" Command="{Binding TestCmd}">
    <Button.Template>
        <ControlTemplate TargetType="ButtonBase">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="AUTO" />
                    <ColumnDefinition Width="AUTO" />
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Content="LABEL CONTENT" Foreground="BlueViolet"/>
                <Button Grid.Column="1" Content="INNER BUTTON" Command="{Binding TestCmd2}"/>
            </Grid>
        </ControlTemplate>
    </Button.Template>
</Button>

因此,如果您按"内部按钮",则TestCmd2正在执行,如果单击"标签内容",则TestCmd正在执行。

最新更新