wpftoolkit zoombox 带命令的外部导航

wpftoolkit zoombox external navigation with commands

我想制作额外的按钮块来控制 Xceed.Wpf.Toolkit.Zoombox.Zoombox
在当前的实现中,Zoombox 命令是 RoutedUICommands,所以如果我使用它们,Zoombox 控件不会接收它们。
这是一个示例 XAML:

                                <xctk:Zoombox>
                                    <Image Source="{Binding ImageAttachment.Path}" infrastructure:AttachedProperties.IgnoreVerticalAligment="True" />
                                </xctk:Zoombox>
                                <StackPanel>
                                    <Button x:Name="HomeButton"
                                            Width="20px"
                                            Height="20px"
                                            Command="xctk:Zoombox.Home"
                                            Style="{StaticResource TransparentButton}"
                                            ToolTip="Go Home">
                                        <Image Margin="2" Source="{StaticResource HomeGlyph}" />
                                    </Button>
                                    <Button x:Name="FitButton"
                                            Width="20px"
                                            Height="20px"
                                            Margin="2,0"
                                            Command="xctk:Zoombox.Fit"
                                            Style="{StaticResource TransparentButton}"
                                            ToolTip="Fit Content within Bounds">
                                                <Image Margin="2" Source="{StaticResource FitContentGlyph}" />
                                        </Button>
                                <StackPanel>

有什么方法可以包含对 RoutedUICommands 路由的控制吗?

RoutedCommand 的工作原理是从生成命令的控件开始,向上冒泡通过控件层次结构,直到它被处理。在您的示例中,RoutedCommand 的路径为:Button > StackPanel > Window。 RoutedCommand 不会转到 Zoombox,因为它是 StackPanel 的同级而不是父级。

为了让它起作用,您需要使用按钮的CommandTarget 属性。 CommandTarget 使 RoutedCommand 从目标开始,然后沿着树向上移动。你可以这样做:

<xctk:Zoombox x:Name="myZoomBox">
     <Image Source="{Binding ImageAttachment.Path}"/>
</xctk:Zoombox>
<StackPanel>
     <Button x:Name="HomeButton"
             Command="xctk:Zoombox.Home"
             CommandTarget="{Binding ElementName=myZoomBox}"/>
</StackPanel>