我想访问DataTemplate
内的特定控件,并从 CodeBehind 设置ValueConverter
。
ValueConverter
应该从使用页面/控件中传入。
我的 MainPage 正在使用来自其他项目的 UserControls ,因为它们应该在我的大多数应用程序中使用。
UserControl
看起来像这样:
<Grid>
<ListView Name="SampleListView">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Name="SampleGrid">
<TextBlock Name="SampleTextBox" Text="{Binding BindingProperty}" />
<TextBlock Name="TextBoxIWantToAccess" Foreground="{Binding SampleDateTime, Converter={StaticResource DateTimeToColorConverter}}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
所以我的建议是首先从代码后面访问它,但它没有用...
我试过这个: Binding(Converter) in Code Behind
结合这个: WPF How to access control from DataTemplate
但它无效
所以现在我的建议是我也可以在代码
中这样做public MyUserControl1(IValueConverter converter)
{
this.InitializeComponent();
this.Resources.Add("DateTimeToColorConverter", converter);
}
但它没有用......
可能是... Converter={StaticResource DateTimeToColorConverter}}"
,不应将其指定为 StaticResource ,因为它来自 CodeBehind
但我尝试了很多组合而且没有用......
有什么建议吗?
答案 0 :(得分:1)
以下适用于我:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"
Foreground="{Binding Converter={StaticResource MyConverter}}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
在代码背后:
public MyUserControl1()
{
this.Resources["MyConverter"] = new FooConverter();
this.InitializeComponent();
}
请注意,我在调用InitializeComponent()之前添加了资源。