2016-08-17 3 views
2

Ich bin mit einem Problem konfrontiert, Kind Element zu finden. Ich möchte auf das TextBlock-Element in Label zugreifen. Aber ich kann es nicht finden.Wie kann ich unter Verwendung von Stil auf Kindelement eines beliebigen Objekts zugreifen?

Hier ist mein MainWindow.xaml Code:

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

Hier ist mein Stil-Code:

<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> 

I TextBox Eigenschaft Text binden möchten innerhalb TextBlock- Eigenschaft Text zu beschriften. Was soll ich machen ? Ich hoffe, ich habe mich selbst klar gemacht. Danke.

Im Folgenden finden Sie ein Beispielbild: enter image description here

+0

warum nicht verwenden Standardvorlage, sondern hinzufügen '' nach "labelstil"? Standardvorlage ist fast identisch * und * verwendet richtig ContentPresenter – ASh

+0

Durch die Neudefinition der Vorlage des Labels, die Sie neu erstellen, was das Steuerelement Label in der Schnittstelle definiert. Ihr TextBlock ist nicht Teil der Vorlage, daher wird er nicht angezeigt, da er nicht mehr in der Baumstruktur vorhanden ist. – nkoniishvt

+0

Ich möchte eigentlich Text und Bild nebeneinander hinzufügen. Vorher habe ich versucht, TextBox zu verwenden. Aber ich kann dem TextBox-Text kein Bild hinzufügen. Also habe ich den Textblock benutzt, damit ich jedes Bild oder Text hinzufügen kann. Ich kann Bild oder Text zu TextBlocks Inlines hinzufügen. Wo liege ich falsch? – MLElyakan

Antwort

0

Dies Sie wird es einen Text über die Bindung und der Benutzer angezeigt werden lassen können, wählen, aber nicht die TextBox eingeben. Wenn Sie auch in dem Text in der Lage sein möchten, geben Sie, entfernen Sie die 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

Es half Ich @ Stewbob. Wie kann ich ein Bild in den Textfeldtext einfügen? Ich möchte keine Gitterspalte verwenden. Ich gebe irgendeinen Text ein oder lächle Symbolzeichen ":)". Eigentlich funktioniert das für mich. Ich kann Texte aber auswählen, wenn ich Bild in Textfeld einfügen wollte. Ich erhalte einen Fehler wie so "System.Windows.Documents.InlineUIContainer" dieser Text schreibt in Textbox. Wie kann ich dieses Problem beheben? Danke.. – MLElyakan

+0

'TextBox' ist überhaupt nicht die geeignete Kontrolle dafür. Sie könnten das 'RichTextBox'-Steuerelement versuchen. – Stewbob

+0

Ich sehe. Ich denke, die einzige Möglichkeit, die ich richtextbox verwenden möchte. Danke vielmals. – MLElyakan

0

Statt einen Textblock in Ihrem Label verwenden, lassen Sie es einfach in Ihrer Vorlage und haben sie das Label Inhalt Referenz für den Text zu sein angezeigt.

Unten ist ein Beispiel:

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

und für das Styling/template

<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> 

Diese Sie mit dem zentrierten Text in der roten Umrandung Sie scheinen zu versuchen, zu erreichen, schaffen sollte.

Hoffentlich hilft Ihnen das ein bisschen.

+0

Ich habe diese Codierung verwendet. Aber das Problem ist das. Ich kann keinen Text innerhalb des Textblockelements auswählen. Es lässt nicht zu, dass irgendein Text das kopiert. Dementsprechend musste ich das Textbox-Element innerhalb der Etikettenvorlage verwenden. Danke für Ihre Hilfe – MLElyakan

Verwandte Themen