2013-10-01 2 views
0

Я настроил TreeView в usercontrol. В HierarchicalDataTemplate у меня есть изображение с направлением (стрелка для примера).Связывание с UserControl Inside HierarchicalDataTemplate в Silverlight

При изменении направления потока приложения \ UserControl мне нужно перевернуть изображение.

Так я пытался связывать Image.FlowDirection (который подбрасывает изображение автоматически при RightToLeft) в UserControl.FlowDirection

<Image FlowDirection="{Binding Path=FlowDirection, 
           ElementName=MyUserControl}" ... /> 

Но это не работает. Я думаю, потому что он не может найти UserControl внутри шаблона. Я пробовал эту привязку за пределами шаблона - и он работает нормально.

Любое решение? Как я могу получить UserControl внутри шаблона?

--UPDATE--

Есть два места связывания в этом XAML. Первый - в стиле кнопки, и он работает, а второй в шаблоне TreeViewItem - и там он не работает.

<UserControl x:Class="MyTree" 
... 
    d:DesignHeight="218" d:DesignWidth="284" x:Name="MyLayerListControl"> 
<UserControl.Resources> 
     <Style x:Key="CloseButtonStyle" TargetType="Button"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Grid> 
          <VisualStateManager.VisualStateGroups> 
           ... 
          </VisualStateManager.VisualStateGroups> 

          <Border x:Name="CloseButtonBorder" BorderThickness="0" Margin="3" CornerRadius="0" Background="Gray" > 

<!-- THIS BINDING IS WORKING --> 
           <Image Source="{StaticResource back}" Margin="2" 
FlowDirection="{Binding Path=FlowDirection, ElementName=MyLayerListControl}"/> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
</UserControl.Resources> 

<Grid x:Name="LayoutRoot" Background="Transparent"> 

<Button Style="{StaticResource CloseButtonStyle}" />  

<Grid> 
    <Grid.ColumnDefinitions></Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"></RowDefinition> 
      <RowDefinition Height="*"></RowDefinition> 
    </Grid.RowDefinitions> 


    <Grid.Resources> 
     <sdk:HierarchicalDataTemplate x:Key="LayerListTemplate" ItemsSource="{Binding Path=Childrens}" > 
      <Grid> 
       <Border CornerRadius="2" BorderBrush="#FF6DBDD1" BorderThickness="1" Background="#FFBADDE9" Opacity="0.5" /> 
       <StackPanel Orientation="Vertical"> 
        <!-- The Item --> 
        <StackPanel Orientation="Horizontal" Margin="3"> 

<!-- THIS BINDING IS NOT WORKING --> 
        <Image x:Name="ArrowImage" Width="16" Height="16" Source="{StaticResource arrow}" 
FlowDirection="{Binding Path=FlowDirection, ElementName=MyLayerListControl}"/> 

        </StackPanel> 

       </StackPanel> 
      </Grid> 
     </sdk:HierarchicalDataTemplate> 
    </Grid.Resources> 

    <sdk:TreeView ItemsSource="{Binding}" ItemTemplate="{StaticResource LayerListTemplate}" x:Name="MyTreeView" Grid.Row="1" /> 
</Grid> 

</Grid> 
</UserControl> 
+0

Try «{Binding Path = DataContext.FlowDirection, ElementName = MyUserControl} –

+0

Извините, но это не работает –

+0

Вы можете разместить полный код того, что не работает? –

ответ

0

Как говорит @ Крис, добавить «DataContext» перед вами привязкой пути, как вы являетесь обязательным для самого контроля, так что если FlowDirection является собственностью DataContext, вы должны иметь это.

Кроме того, убедитесь, что у вас установлен режим = TwoWay.

В качестве альтернативы вы можете использовать RelativeSource, поэтому вам не нужно жестко кодировать ElementName.

Отъезд: http://tonychampion.net/blog/index.php/2011/12/7th-day-of-silverlight-ancestor-relative-source-binding/

+0

Проблема в том, что я использую ограничение Silverlight 4 - 3rd party. и в версии 4 нет AncestorType. –

Смежные вопросы