2016-04-12 2 views
0

Я видел много вопросов о stackoverflow относительно привязки ControlTemplate.Trigger, но я не сталкивался с какой-либо информацией относительно привязки к datatrigger элемента управления внутри ControlTemplate.Datatrigger для прямоугольника внутри ControlTemplate

Внутри моего ControlTemplate У меня есть Rectangle. Заполнение обычно красное, за исключением случаев, когда depency propertyInput1Active равно 1. Я пробовал следующий код, но он работает неправильно.

<Style TargetType="{x:Type local:CustomAxis_IO}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}"> 
       <Grid      
        <Rectangle Fill="Red"> 
        <Rectangle.Style> 
         <Style TargetType="{x:Type Rectangle}"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Input1Active}" Value="1"> 
            <Setter Property="Fill" Value="Green"/> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Rectangle.Style> 
        </Rectangle> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Как я могу связать DataTrigger для прямоугольника свойства зависимостей Input1Active для контроля?

ответ

0

Хорошо, я решил свою проблему. Похоже, мне нужно было создать ControlTemplate.Trigger и ссылаться на мой Rectangle, который я пытался изменить по имени.

<Style TargetType="{x:Type local:CustomAxis_IO}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}"> 
       <Grid> 


         <Rectangle Fill="Red" x:Name="Axis1Rect" Width="100" Height="20"> 

         </Rectangle> 

       </Grid> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self},Path=Input1Active}" Value="1"> 
         <Setter TargetName="Axis1Rect" Property="Fill" Value="Green"/> 
        </DataTrigger> 

       </ControlTemplate.Triggers> 
      </ControlTemplate> 

     </Setter.Value> 
    </Setter> 
</Style> 
1

Возможно, это связано с тем, что вы пытаетесь создать шаблон в стиле.

Поскольку вы находитесь внутри ControlTemplate, вам не нужно использовать отдельные стили для триггеров, чтобы в любом случае изменять вещи внутри вашего шаблона.

Попробуйте это:

<Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:CustomAxis_IO}"> 
       <Grid> 
        <Rectangle x:Name="InternalRectangle" Fill="Red"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Input1Active" Value="1"> 
         <Setter TargetName="InternalRectangle" Property="Fill" Value="Green"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

Использование ControlTemplate.Triggers и именование части шаблона для настройки, что ваш шаблон делает намного проще и гораздо более гибким.

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