我正在开发winrt。 我想在ValueConverter中访问父UI elemnet。 最终我想通过检查每个项目的输入datacontext来更改父级的VisualState。 这个值转换器是某种假东西,可以作为相同的输入和相同的输出。 它适用于输入每个项目的datacontex的入口点。
我的工作代码如下......
public class MvvmTestPageLbObjVsConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
MockupMember member = (MockupMember)value;
Control control = (Control)parameter;
if (member.Name[0] == '김')
{
VisualStateManager.GoToState(control, "VsFamilyNameKim", false);
}
else
{
VisualStateManager.GoToState(control, "VsFamilyNameDef", false);
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
我的xaml标记代码如下......
<Page.Resources>
<local:MvvmTestPageLbObjVsConverter x:Name="MvvmTestPageLbObjVsConverter" />
</Page.Resources>
<Page.DataContext>
<local:MvvmTestPageVm />
</Page.DataContext>
<Grid>
<ListView x:Name="LvObj" />
<ListBox x:Name="LbObj" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Top"
ItemsSource="{Binding Members}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Grid x:Name="GdBg" Background="#FF888888">
<Grid.Resources>
<local:MvvmTestPageLbObjVsConverter x:Key="MvvmTestPageLbObjVsConverter" />
</Grid.Resources>
<Grid.DataContext>
<Binding Converter="{StaticResource MvvmTestPageLbObjVsConverter}"
ConverterParameter="{RelativeSource Mode=Self}"></Binding>
</Grid.DataContext>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VsgFamilyName">
<VisualState x:Name="VsFamilyNameDef" />
<VisualState x:Name="VsFamilyNameKim">
<Storyboard>
<ColorAnimation Duration="0" To="Magenta"
Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)"
Storyboard.TargetName="GdBg" d:IsOptimized="True" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Id}"
VerticalAlignment="Top" FontSize="20" />
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Name}"
VerticalAlignment="Top" Margin="100,0,0,0" FontSize="20" Foreground="Lime" />
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="{Binding Address}"
VerticalAlignment="Top" Margin="200,0,0,0" FontSize="20" Foreground="Yellow" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</Grid>