我正在作爲一個測試此地點的工作,但基本上我試圖完成的是用戶爲每個「D」因爲單詞的第一個字母會將該文本的顏色更改爲紅色。通過將RichTextBox的前景綁定到我的Customers.TColor屬性來完成顏色更改。
我真正的邏輯問題都發生在我的TColor屬性作爲程序工作時,吸氣劑是尋找剛剛Character.Name的第一個字符只是單行(現在註釋掉):
return name.Length > 0 && name[0] == 'D' ? Brushes.Red : Brushes.Black;
不過,我想將此功能擴展到每個單詞。這裏是我的TColor屬性的邏輯:更改以特定字母開頭的每個單詞的顏色
public Brush TColor
{
get
{
string[] allNames = name.Split(null);
foreach (string n in allNames)
{
if(n[0] == 'D')
{
return Brushes.Red;
}
else
{
return Brushes.Black;
}
}
return Brushes.Black;
//return name.Length > 0 && name[0] == 'D' ? Brushes.Red : Brushes.Black;
}
set
{
tColor = defaultColor;
}
}
我試圖做的是單獨獲得每個字,所以allNames
應該拆分用戶輸入一個詞,然後檢查每個的人的第一個字符,如果是D將畫筆設置爲紅色,否則將該單詞的畫筆設置爲黑色。如果我退出了構建Customer對象時設置的默認值,則會出現運行時錯誤。
我想知道兩件事
1.如果這是我應該嘗試改變RichTextBody中單個單詞的顏色的方式。
2.如何有效地查看每個單詞的第一個字符並更改其顏色。
這裏是我的RichTextBody目前的樣子:
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center" Margin="10,0,3.4,0" Width="505">
<Label Content="Customer name:" />
<RichTextBox x:Name="richTextBox" Height="100" Width="366">
<FlowDocument>
<Paragraph Foreground="{Binding Customer.TColor}">
<Run></Run>
<Run Text="{Binding Customer.Name, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
</Paragraph>
</FlowDocument>
</RichTextBox>
<Button Content="Update" Command="{Binding UpdateCommand}"/>
</StackPanel>
我的相關變量和性能如下:
private string name;
private Brush tColor;
private Brush defaultColor = Brushes.Black;
我的構造函數是:
public Customer(String customerName)
{
Name = customerName;
TColor = defaultColor;
}
我的名字屬性是:
public String Name
{
get
{
return name;
}
set
{
name = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("TColor"));
//OnPropertyChanged("Name");
}
}
以防萬一我什麼都沒留下,a repo of the project is here