none
WPF: Как обращаться к именованным частям шаблона? RRS feed

  • Вопрос

  • Пишу пользовательский контрол:

     

    <UserControl x:Class="Controls.EditedTextBlock"
                 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:local="clr-namespace:Controls"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
      <Grid>
        <Button Name="PART_button" Visibility="Visible" Click="PART_button_Click" MouseDoubleClick="PART_button_MouseDoubleClick">
          <Button.Template>
            <ControlTemplate TargetType="{x:Type Button}">
              <ContentPresenter 
    HorizontalAlignment="{Binding Path=HorizontalTextAlignment,
    RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type local:EditedTextBlock}}}
    "
    VerticalAlignment="{Binding Path=VerticalTextAlignment,
    RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type local:EditedTextBlock}}}
    " /> </ControlTemplate> </Button.Template> </Button> <TextBox Name="PART_textBox" Visibility="Hidden" KeyDown="PART_textBox_KeyDown" LostFocus="PART_textBox_LostFocus" /> </Grid> </UserControl>

     


    потом в программе переопределяю шаблон компонента:

     

     

    <my:EditedTextBlock HorizontalAlignment="Left" Margin="12,12,0,0" 
    x:Name
    ="editedTextBlock1" VerticalAlignment="Top" Height="50" Width="181"
    FontWeight
    ="Bold" FontStyle="Normal"> <my:EditedTextBlock.Template> <ControlTemplate TargetType="{x:Type my:EditedTextBlock}"> <ControlTemplate.Triggers> <Trigger Property="my:EditedTextBlock.Mode" Value="ReadOnly"> <Setter TargetName="PART_button" Property="Control.Background" Value="Red" /> </Trigger> <Trigger Property="my:EditedTextBlock.Mode" Value="Edited"> <Setter TargetName="PART_textBox" Property="Control.Background" Value="Aqua" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </my:EditedTextBlock.Template> </my:EditedTextBlock>

    При запуске программы выдает ошибку, что не находит дочерних контролов PART_button и PART_textBox:

    "Child with Name 'PART_button' not found in VisualTree."

     





    • Изменено Denphi 6 сентября 2011 г. 11:16
    6 сентября 2011 г. 11:06

Ответы