0

別のウィンドウから RadDiagram コマンドを使用しようとしています。「参照 'ElementName=Diagram' のバインディングのソースが見つからない」ため、バインディングが機能しません。私の(簡略化された)XAMLは次のようになります。

<UserControl x:Class="Client.Wpf.EditableLayoutControl"
             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:telerik="http://schemas.telerik.com/2008/xaml/presentation"
             xmlns:s="clr-namespace:Client.Wpf" xmlns:Converters="clr-namespace:Client.Wpf.Converters"
             mc:Ignorable="d" DataContext="{Binding RelativeSource={RelativeSource Self}}"
             d:DesignHeight="300" d:DesignWidth="800" Background="Transparent" Name="Root">
    <UserControl.Resources>
        <Converters:MultiBoolToVisibilityConverter x:Key="multiBoolToVis"/>
        <Converters:ObjectToBooleanConverter x:Key="objToBool"/>
        <telerik:InvertedBooleanConverter x:Key="invBool"/>
    </UserControl.Resources>
    <telerik:RadDocking HasDocumentHost="False" BorderThickness="0" Name="DockingStation">
        <telerik:RadSplitContainer>
            <telerik:RadPaneGroup>
                <telerik:RadPane CanDockInDocumentHost="False" Title="Controls" >
                    <telerik:RadPane.TitleTemplate>
                        <DataTemplate>
                            <Grid Margin="0 5">
                                <ContentPresenter Content="{Binding}" VerticalAlignment="Center"/>
                                <telerik:RadButton Command="telerik:DiagramCommands.Undo" CommandTarget="{Binding Path=Diagram, Source={RelativeSource FindAncestor, AncestorType={x:Type s:EditableLayoutControl}}}" />
                            </Grid>
                        </DataTemplate>
                    </telerik:RadPane.TitleTemplate>
                    <telerik:RadTabControl ...></telerik:RadTabControl>
                </telerik:RadPane>
            </telerik:RadPaneGroup>
        </telerik:RadSplitContainer>
        <telerik:RadSplitContainer>
            <telerik:RadPaneGroup>
                <telerik:RadPane PaneHeaderVisibility="Collapsed" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
                    <Grid>
                        <telerik:RadDiagram Name="Diagram">...
                        </telerik:RadDiagram>
                    </Grid>
                </telerik:RadPane>
            </telerik:RadPaneGroup>
        </telerik:RadSplitContainer>
    </telerik:RadDocking>
</UserControl>

問題のあるコード行は、DataTemplate 内からのこの美しいものです。

CommandTarget="{Binding Path=Diagram, Source={RelativeSource FindAncestor, AncestorType={x:Type s:EditableLayoutControl}}}"

Diagram はプロパティではなく、バインディングにはプロパティが必要なため、このコード行は機能しません。ElementName と Source は排他的であるため、Path の代わりに ElementName を使用しても機能しません。私もこれを試しました:

CommandTarget="{Binding ElementName=Diagram}"

そのコード行は機能しません。次のエラーが発生します。

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=Diagram'. BindingExpression:(no path); DataItem=null; target element is 'RadButton' (Name=''); target property is 'CommandTarget' (type 'IInputElement')

も試しCommandTarget="{x:Reference Diagram}"ましたが、その機能は.NET 4.0にはまだ実装されていないようです。それはどのように行われますか?

4

1 に答える 1

0

この特定の状況では、元に戻すボタンに Loaded イベントを設定する必要がありました。次に、イベント ハンドラー (コード ビハインド) で次のようにしました((RadButton)e.Source).CommandTarget = Diagram;

于 2013-02-25T20:07:20.980 に答える