Как использовать XAML для доступа к именованному элементу управления в шаблоне

Я хочу получить доступ к именованному элементу управления в шаблоне.

Как глубокий пользовательский RadioButton, и добавьте TextBlock с именем «tb_text»

Могу ли я использовать XAML для этого RadioButton, чтобы изменить tb_text.text? Большинство статей, которые я нашел, посвящены программному коду, а не XAML.

Пример:

<RadioButton  Height="81" Width="617" Style="{StaticResource RadioButtonStyle1}">
    <RadioButton.tb_text>
          [SOMETEXT WORD]
    </RadioButton.tb_text>
</RadioButton>

Стиль:

<Style x:Key="RadioButtonStyle1" TargetType="RadioButton">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}"/>
    <Setter Property="Padding" Value="8,6,0,0"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalContentAlignment" Value="Left"/>
    <Setter Property="VerticalContentAlignment" Value="Top"/>
    <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}"/>
    <Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}"/>
    <Setter Property="MinWidth" Value="120"/>
    <Setter Property="UseSystemFocusVisuals" Value="True"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RadioButton">
                <Grid Name="gv1" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}">

                    <VisualStateManager.VisualStateGroups>
                        <VisualStateGroup x:Name="CommonStates">
                            <VisualState x:Name="Normal"/>
                            <VisualState x:Name="PointerOver">
                                <Storyboard>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="OuterEllipse">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Stroke" Storyboard.TargetName="CheckOuterEllipse">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="CheckOuterEllipse">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightTransparentBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Fill" Storyboard.TargetName="CheckGlyph">
                                        <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAltBaseHighBrush}"/>
                                    </ObjectAnimationUsingKeyFrames>
                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Pressed">
                                <Storyboard>

                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Disabled">
                                <Storyboard>

                                </Storyboard>
                            </VisualState>
                        </VisualStateGroup>
                        <VisualStateGroup x:Name="CheckStates">
                            <VisualState x:Name="Checked">
                                <Storyboard>

                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="gv1">
                                        <DiscreteObjectKeyFrame KeyTime="0">
                                            <DiscreteObjectKeyFrame.Value>
                                                <ImageBrush Stretch="Fill" ImageSource="Assets/img/btn_blue_fill.png"/>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>

                                </Storyboard>
                            </VisualState>
                            <VisualState x:Name="Unchecked">
                                <Storyboard>

                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="gv1">
                                        <DiscreteObjectKeyFrame KeyTime="0">
                                            <DiscreteObjectKeyFrame.Value>
                                                <ImageBrush Stretch="Fill" ImageSource="Assets/img/btn_blue_line.png"/>
                                            </DiscreteObjectKeyFrame.Value>
                                        </DiscreteObjectKeyFrame>
                                    </ObjectAnimationUsingKeyFrames>

                                </Storyboard>
                            </VisualState>
                                <VisualState x:Name="Indeterminate"/>
                        </VisualStateGroup>
                    </VisualStateManager.VisualStateGroups>

                    <TextBlock Name="tb_text" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" Foreground="#00BBD5" Text="text"/>

                    <ContentPresenter x:Name="ContentPresenter" AutomationProperties.AccessibilityView="Raw" ContentTemplate="{TemplateBinding ContentTemplate}" ContentTransitions="{TemplateBinding ContentTransitions}" Content="{TemplateBinding Content}" Grid.Column="0" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" TextWrapping="Wrap" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Мне нужно с помощью XAML присвоить значение tb_text, которое находится внутри шаблона, а не С#.


person Nathaniel Chen    schedule 17.04.2016    source источник
comment
Может быть, вы хотите получить доступ к именованному элементу управления? (не контроллер)   -  person Alexej Sommer    schedule 17.04.2016
comment
@AlexejSommer да, это опечатка, спасибо!   -  person Nathaniel Chen    schedule 17.04.2016
comment
Возможный дубликат элементов ListBox возвращает строку, когда DataTemplate является кнопкой   -  person Salah Akbari    schedule 17.04.2016


Ответы (1)


Как это сделать в UWP:

Сначала вам нужно создать класс с прикрепленным свойством:

    public class Class1
{

    public static readonly DependencyProperty tbtextProperty = DependencyProperty.RegisterAttached(
"tbtext", typeof(String), typeof(Class1), new PropertyMetadata(string.Empty));

    public static void Settbtext(UIElement element, String value)
    {
        element.SetValue(tbtextProperty, value);
    }

    public static String Gettbtext(UIElement element)
    {
        return (String)element.GetValue(tbtextProperty);
    }
}

И после этого вы должны добавить в сеттеры в своем стиле:

<Setter Property="local:Class1.tbtext" Value="some text"></Setter>

Теперь отредактируйте свой TextBlock внутри шаблона:

<TextBlock x:Name="tb_text" Grid.Column="1" Text="{TemplateBinding local:Class1.tbtext}"></TextBlock>

Вот. Теперь вы можете использовать:

  <RadioButton  Height="81" Width="617" Style="{StaticResource RadioButtonStyle1}">
        <local:Class1.tbtext>
            SOMETEXT WORD
        </local:Class1.tbtext>
   </RadioButton>
person Alexej Sommer    schedule 17.04.2016
comment
Нет, это не из XAML, это доступ из кода программной части - person Nathaniel Chen; 17.04.2016
comment
ааа так. но в вашем примере у вас нет шаблона. может часть кода отсутствует? а вам нужен контроль доступа внутри стиля RadioButtonStyle1? - person Alexej Sommer; 17.04.2016
comment
@ Натаниэль Чен, у меня есть обновленный ответ. Отметьте это, если это полезно и отвечает на ваш вопрос - person Alexej Sommer; 17.04.2016