2016-04-17 65 views
0

我想訪問模板中的指定控件。如何使用XAML訪問模板中的指定控件

像深定製單選按鈕,並添加名爲「tb_text」

我可以用XAML這本單選按鈕來更改tb_text.text一個TextBlock? 大部分我發現的文章都是關於代碼隱藏而不是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內模板,而不是C#。

+0

可能是你想訪問命名控制? (不是控制器) –

+0

@AlexejSommer是的,這是錯字,謝謝! –

+2

[ListBox項目返回字符串,當DataTemplate是Button時可能的重複](http://stackoverflow.com/questions/34117944/listbox-items-return-string-when-datatemplate-is-button) –

回答

0

如何做到這一點在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> 
+0

不,這不是XAML,這是從代碼隱藏訪問 –

+0

啊所以。但在你的例子中,你沒有模板。可能是缺少代碼的一部分?並且您需要RadioButtonStyle1風格內的訪問控制? –

+0

@Nathaniel Chen我已經更新了答案。標記它是否有幫助並回答你的問題 –

相關問題