我正在编写一个能够使用this切换语言的应用程序。 我还有一个有两个功能的combox:
我的组合框看起来像
<Grid>
<ComboBox x:Name="MyCB" SelectionChanged="OnCbObjectsSelectionChanged" ...>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected}" Checked="OnCbObjectCheckBoxChecked" Unchecked="OnCbObjectCheckBoxChecked" Width="20" />
<TextBlock Text="{Binding Value}" Width="100" />
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<TextBlock Visibility="{Binding SelectedItem, ElementName=MyCB, Converter={StaticResource Null2Vis}}"
IsHitTestVisible="False"
VerticalAlignment="Center"
Name="tbObjects"
Text="{ns:Loc Var1}"
FontSize="20"
Foreground="Gray"/>
</Grid>
我使用return Visibility.Visible;
临时停用了转换器,但没有效果。
每当我检查一些复选框时,都会设置combobox.Text属性,并且来自ns:Loc的绑定会被覆盖。如果未选中所有复选框,如何在代码中再次设置它?
private void OnCbObjectCheckBoxChecked(object sender, RoutedEventArgs e)
{
StringBuilder sb = new StringBuilder();
foreach (var cbObject in MyCB.Items)
if (cbObject.IsSelected)
sb.AppendFormat("{0}, ", cbObject.Value);
tbObjects.Text = sb.ToString().Trim().TrimEnd(',');
if (tbObjects.Text == "")
{
Binding myBinding = new Binding();
myBinding.Source = TranslationSource.Instance["Var1"]; // <- this does not work :/
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(tbObjects, TextBox.TextProperty, myBinding);
tbObjects.Foreground = new SolidColorBrush(Colors.Gray);
}
}
取消选中所有复选框后,组合框中没有文字。 我错过了什么?
修改:在代码中添加了TextBox
元素
答案 0 :(得分:0)
如果我正确理解您的代码以恢复本地化绑定,则无需重新定义Binding
- 将LocExtension
与适当的参数一起使用就足够了,因为它来自{ {1}}:
Binding
但如果由于某种原因你还想重新定义if (tbObjects.Text == "")
{
var myBinding = new LocExtension("Var1");
BindingOperations.SetBinding(tbObjects, TextBox.TextProperty, myBinding);
tbObjects.Foreground = new SolidColorBrush(Colors.Gray);
}
,那么它应该是什么样子:
Binding
请注意,绑定的来源是if (tbObjects.Text == "")
{
Binding myBinding = new Binding("[Var1]");
myBinding.Source = TranslationSource.Instance;
myBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
BindingOperations.SetBinding(tbObjects, TextBox.TextProperty, myBinding);
tbObjects.Foreground = new SolidColorBrush(Colors.Gray);
}
,路径应该是&#34; [Var1]&#34;用TranslationSource.Instance
参数表示其索引器。
由于"Var1"
索引器是只读的,因此将TranslationSource.Item[string]
设置为reduntant。另外,出于同样的原因,我将Binding.UpdateSourceTrigger
设置为Binding.Mode
。