2013-02-22 34 views
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> 

有問題的代碼行是這樣的BEAUT從裏面的DataTemplate:

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

這行代碼不起作用,因爲圖是不是屬性,並且綁定需要屬性。使用ElementName而不是Path也不起作用,因爲ElementName和Source是獨佔的。我也試過這個:

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中。它是如何完成的?

回答

0

在這種特殊情況下,我必須在撤消按鈕上設置Loaded事件。然後在我的事件處理程序(代碼隱藏)中,我這樣做了:((RadButton)e.Source).CommandTarget = Diagram;