2015-03-09 4 views
0
<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:WpfCustomControlLibrary1"> 

<ContentControl x:Key="BackSide" Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Back}" RenderTransformOrigin="0.5,0.5"> 
    <ContentControl.RenderTransform> 
     <ScaleTransform ScaleX="-1" /> 
    </ContentControl.RenderTransform> 
</ContentControl> 

<Style TargetType="{x:Type local:CustomControl1}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomControl1}"> 
       <ContentControl Grid.Row="1"> 
        <ContentControl.RenderTransform> 
         <TransformGroup> 
          <ScaleTransform x:Name="tf" ScaleX="1" /> 
         </TransformGroup> 
        </ContentControl.RenderTransform> 
        <ContentControl.Style> 
         <Style TargetType="ContentControl"> 
          <Setter Property="Content" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Front}" /> 
          <Style.Triggers> 
           <DataTrigger Value="True"> 
            <DataTrigger.Binding> 
             <Binding ElementName="tf" Path="ScaleX"> 
              <Binding.Converter> 
               <loc:LessThanXToTrueConverter X="0" /> 
              </Binding.Converter> 
             </Binding> 
            </DataTrigger.Binding> 
            <DataTrigger.Setters> 
             <Setter Property="Content" Value="{StaticResource BackSide}"/> 
            </DataTrigger.Setters> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ContentControl.Style> 
       </ContentControl> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

WPF CustomControl содержание переключатель ContentControl

Это некоторый XAML код из customcontrol. Там, где есть два свойства зависимостей (Front и Back).

Через мой DataTrigger Я хочу изменить содержимое ContentControl с помощью «Front», чтобы использовать «Назад». Сначала он отображает свойство depencency «Front», а затем он должен использовать свойство «Назад» в качестве Контента. Это делается с помощью этого кода:

<DataTrigger.Setters> 
    <Setter Property="Content" Value="{StaticResource BackSide}"/> 
</DataTrigger.Setters> 

Но это не работает ...

я могу связать и отображать содержимое свойства Front зависимостей в моем управлении по:

<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Front}" /> 

но я не могу понять, как связать средство настройки DataTrigger, чтобы он использовал ContentControl Content с x: Key = «BackSide» ContentControl.

Заранее благодарен.

+0

Есть ли у вас ошибки привязки в окне вывода? –

+0

Вы также гарантировали, что значение действительно верно для вашего datatrigger? –

+0

Если я установил Setter таким же образом с параметром RelatedSource TemplatedParent, как и свойство Front (и, как предлагает Шеридан), я вижу контент, но мой RenderTransform ScaleTransform не применяется. – juFo

ответ

0

Вы сказали, что это работает XAML:

<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource 
    TemplatedParent}, Path=Front}" /> 

Так почему бы вам не просто попытайтесь поместить этот код XAML в ваш DataTrigger:

<Setter Property="Content" Value="{Binding RelativeSource={RelativeSource 
    TemplatedParent}, Path=Back}" /> 

UPDATE >>>

Я не совсем уверен, что вы пытаетесь сделать со своими UIElement DependencyProperty, но я предполагаю, что т вы принимаете неправильный подход. Обычно в WPF наши свойства - это типы, а не UI типы, а затем мы генерируем типы пользовательских интерфейсов с использованием DataTemplate ... возможно, вам следует пересмотреть свой подход.

Для получения дополнительной помощи см. Страницу Data Templating Overview на MSDN.

Вы также можете найти мой ответ на вопрос WPF MVVM navigate views, который полезно прочитать.

+0

Я уже это сделал, но по какой-то причине RenderTransform/ScaleTransform игнорируется в этом случае. Если ничего лишнего не требуется? – juFo

+0

«RenderTransform» игнорируется так, потому что мы ссылаемся только на свойство, а не на ContentControl в «Ресурсах». – Sheridan

+0

Любой образец кода, чтобы объяснить это, поскольку я сейчас запутался. : s – juFo

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