In meiner WPF-Anwendung habe ich zwei Textblöcke, die aus dem Code dahinter mit einem Lauf gefüllt werden. Jede zweite Zeile sollte eine andere Hintergrundfarbe haben, damit sie leichter zu lesen ist. Leider sind die Zeilen nur so weit gefärbt, wie sie geschrieben sind. Aber ich möchte, dass die Hintergrundfarbe über die gesamte Zeile und nicht nur über den geschriebenen Bereich hinausgeht.WPF - Ändern der Farbe einer ganzen Textblockzeile
Code:
for (int i = 0; i < GlobalSettings.prefixList.Count; i++)
{
runLeft = new Run(GlobalSettings.prefixList[i].prefix + "\n");
runRight = new Run(GlobalSettings.prefixList[i].amount + "\n");
if (i % 2 == 0)
{
runLeft.Background = Brushes.Gray;
runRight.Background = Brushes.Gray;
}
else
{
runLeft.Background = Brushes.LightGray;
runRight.Background = Brushes.LightGray;
}
tblock_StatisticsLeft.Inlines.Add(runLeft);
tblock_StatisticsRight.Inlines.Add(runRight);
}
Die beiden Textblöcke sind in der Mitte nahtlos zusammen, so dass es aussehen würde, wie es eine einzelne Zeile in einem einzigen Textblock ist. Die Abstände zwischen den Linien sind vernachlässigbar, wenn dies leichter ist.
Gibt es eine Lösung ohne Verwendung einer Textbox oder Richtextbox?
EDIT:
XAML-Code:
<UserControl x:Class="MuseKeyGenApp.UCStartUp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MuseKeyGenApp"
mc:Ignorable="d"
Background = "#FF0069B4"
d:DesignHeight="500" d:DesignWidth="800">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="26"/>
<RowDefinition Height="0"/>
<RowDefinition Height="*" MinHeight="80"/>
<RowDefinition Height="*" MinHeight="80"/>
<RowDefinition Height="*" MinHeight="80"/>
<RowDefinition Height="*" MinHeight="80"/>
<RowDefinition Height="*" MinHeight="80"/>
<RowDefinition Height="0"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" MinWidth="150"/>
<ColumnDefinition Width="0.75*" MinWidth="100"/>
<ColumnDefinition Width="0.75*" MinWidth="100"/>
<ColumnDefinition Width="0.75*" MinWidth="100"/>
<ColumnDefinition Width="0.75*" MinWidth="100"/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.Row="2" Grid.RowSpan="3" Grid.Column="1" Grid.ColumnSpan="2" Margin="10,35,12,12" Name="sv_PrefixList">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" x:Name="tblock_StatisticsLeft" HorizontalAlignment="Stretch" LineHeight="20" TextWrapping="Wrap" Margin="0,0,0,0" Text="TextBlock" VerticalAlignment="Stretch" TextAlignment="Left"/>
<TextBlock Grid.Column="1" x:Name="tblock_StatisticsRight" HorizontalAlignment="Stretch" LineHeight="20" TextWrapping="Wrap" Margin="0,0,10,0" Text="TextBlock" VerticalAlignment="Stretch" TextAlignment="Right"/>
</Grid>
</ScrollViewer>
</Grid>
ich links aus all den anderen Sachen der Kontrolle, die nicht relevant ist. Hier
Warum legen Sie nicht die Background-Eigenschaft der Textblöcke tblock_StatisticsLeft und tblock_StatisticsRight fest, statt die Background-Eigenschaft der Run-Elemente zu setzen? – mm8
Da der ganze Textblock eine einzige Farbe hat und nicht für jede einzelne Zeile eine eigene Farbe hat, da ich mich nicht irre. – Gistiv
Was steht dann hinter den TextBlocks? Welche Art von ItemsControl verwenden Sie? Sie müssen die Hintergrundeigenschaft des Elements festlegen, das hinter den TextBlocks angezeigt wird. – mm8