2016-06-20 10 views
0

Möchten Sie die ersten drei Buchstaben einer Schaltfläche fett und unterstrichen setzen.Format auf Knopf erste Buchstaben

<Button Content="{Binding Path=ButtonText}"/> 

Würdest du wissen, wie das geht? Offensichtlich nicht mit einem String-Format ...

Antwort

2

Hallo Ich denke, es gibt keine Möglichkeit, dies vollständig in XAML zu tun, aber mit ein wenig Hilfe von C# ist es möglich. Hier ist, wie ich es tun würde:

Firs Ich habe eine Klasse namens DummyData mit einer Eigenschaft Text erstellt, die ich dann diese Eigenschaft in zwei separate Eigenschaften teilen. Erste enthält nur die ersten 3 Buchstaben meines Text und der andere enthält den Rest:

public DummyData TestData { get; set; } 

public MainWindow() 
{ 

    TestData = new DummyData() { Text = "This is a test data." }; 

    InitializeComponent(); 
} 

public class DummyData 
{ 
    public string Text { get; set; } 

    public string FirstThreeLetters 
    { 
     get 
     { 
      string result = string.Empty; 
      if (!String.IsNullOrEmpty(Text)) 
      { 
       result = Text.Substring(0, 3); 
      } 

      return result; 
     } 
    } 

    public string RestOfTheText 
    { 
     get 
     { 
      string result = string.Empty; 
      if (!String.IsNullOrEmpty(Text)) 
      { 
       result = Text.Substring(3); 
      } 

      return result; 
     } 
    } 
} 

Schließlich werden wir diese Eigenschaften in XAML wie diese vereinen:

<Window 
    x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:WpfApplication1" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    Title="MainWindow" 
    Width="525" 
    Height="350" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}" 
    mc:Ignorable="d"> 
    <Grid> 
     <Button Width="200" Height="100"> 
      <TextBlock> 
       <Run FontWeight="Bold" Text="{Binding TestData.FirstThreeLetters, Mode=OneWay}" /><Run Text="{Binding TestData.RestOfTheText, Mode=OneWay}" /> 
      </TextBlock> 
     </Button> 
    </Grid> 
</Window> 

Achten Sie auf Datacontext, denn das ist wie ich die Daten von meinem Code-Behind binde. Hoffe das hilft.

+0

Hallo Hasan. Vielen Dank, es ist eine großartige Lösung. Ich habe es implementiert, obwohl ein Problem auf dem Display ist, gibt es etwas Platz zwischen dem ersten Teil des Wortes und dem letzten Teil. Kann nicht herausfinden, warum (und keine Marge gefunden schnappt es) – goul

+0

Froh, dass Sie es hilfreich fanden könnten Sie Ihre Antwort bearbeiten und teilen Sie Ihren Code, so dass ich einen Blick auf was passiert. Versuchen Sie einfach, keinen Platz zwischen Läufen zu haben und setzen Sie sie in eine Zeile, wenn das nicht funktioniert. Teilen Sie Ihren Code bitte :). –

+0

Ich werde meine Antwort bearbeiten, sehen, ob das hilft. –