2016-08-17 38 views
2

我正面臨着尋找孩子元素的問題。我想訪問Label中的TextBlock元素。但我找不到它。如何通過使用樣式訪問任何對象的子元素?

這裏是我的MainWindow.xaml代碼:

<Label x:Name="text" Style="{DynamicResource labelstyle}"> 
    <TextBlock>asdasdasd</TextBlock>   
</Label> 

這裏是我的風格代碼:

<Style x:Key="labelstyle" TargetType="Label"> 
     <Setter Property="HorizontalContentAlignment" Value="Left" /> 
     <Setter Property="VerticalContentAlignment" Value="Center" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Label"> 
        <Border BorderThickness="2" BorderBrush="Red"> 
         <TextBox x:Name="textBox" Text="{Binding RelativeSource={RelativeSource FindAncestor, 
                AncestorType={x:Type TextBlock}, 
                AncestorLevel=2},Path=Text}">         
         </TextBox> 
        </Border>      
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

我想文本框的Text屬性綁定到TextBlock中的Text屬性裏面的標籤。我該怎麼辦 ? 我希望我明確自己。 謝謝。

下面是一個示例圖像: enter image description here

+0

爲什麼不使用默認模板,但添加了''to'labelstyle'?默認模板幾乎相同*和*正確使用ContentPresenter – ASh

+0

通過重新定義標籤的模板,您可以重新生成界面中定義控件標籤的內容。您的TextBlock不是模板的一部分,因此它不會顯示,因爲它不再存在於樹中 – nkoniishvt

+0

我實際上想要並排添加文本和圖像。之前,我試過使用TextBox。但是我無法將任何圖像添加到TextBox的文本中。所以,我使用了文本塊,以便我可以添加任何圖像或文本。我可以添加圖像或文本到TextBlock的內聯。我錯在哪裏? – MLElyakan

回答

0

這將讓你通過顯示文字的綁定,用戶將能夠選擇它,而不是在文本框中鍵入。如果您希望能夠同時在文本框中鍵入,刪除IsReadOnly="True"

  <Label Height="30" Width="150"> 
       <Label.Template> 
        <ControlTemplate TargetType="{x:Type Label}"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
           <ColumnDefinition Width="*"/> 
          </Grid.ColumnDefinitions> 
          <Image Grid.Column="0" 
            MinWidth="26" 
            Margin="2" 
            Source="{Binding myImageSource}"/> 
          <TextBox Grid.Column="1" 
              IsReadOnly="True" 
              Text="{Binding myTextValue}" 
              Margin="5,2"/> 
         </Grid> 
        </ControlTemplate> 
       </Label.Template> 
      </Label> 
+0

它幫助我@Stewbob。如何在文本框的文本內插入圖像。我不想使用網格列。我將輸入任何文字或微笑圖標字符「:)」。其實這對我很有用。我可以選擇文本,但是當我想要在文本框中插入圖像時。我收到一個錯誤,如「System.Windows.Documents.InlineUIContainer」這個文本寫在文本框內。我該如何解決這個問題?謝謝.. – MLElyakan

+0

'TextBox'並不適用於此。你可以嘗試'RichTextBox'控件。 – Stewbob

+0

我明白了。我想我想使用richtextbox的唯一方法。非常感謝。 – MLElyakan

0

您無需在標籤中使用TextBlock的,只是把它留在你的模板,並把它引用標籤內容的文本是顯示。

下面是一個例子:

<Label x:Name="text" Content="asdasdasd" Style="{StaticResource labelstyle}"/> 

和定型/模板

<Style x:Key="labelstyle" TargetType="{x:Type Label}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate TargetType="{x:Type Label}"> 
      <Border BorderThickness="2" BorderBrush="Red"> 
       <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{TemplateBinding Content}"/> 
      </Border> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
<Style> 

這應該爲您提供在紅色邊框居中文本你似乎是試圖實現。

希望這可以幫助你一點。

+0

我用那個編碼。但問題是這個。我無法選擇textblock元素內的文本。它不會讓選擇任何文本來複制該文本。因此,我需要在標籤的模板中使用文本框元素。謝謝你的幫助 – MLElyakan