如何在winrt IValueConverter中访问UI元素?

时间:2014-04-22 05:17:25

标签: c# xaml windows-runtime ivalueconverter valueconverter

我正在开发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>

0 个答案:

没有答案