在画布之间动态切换wpf

时间:2016-07-28 08:58:48

标签: wpf canvas

我有多个不同类型的画布图像(图像源,几何体,路径),并且希望仅根据字符串绑定显示1。

最好的办法是什么?

我希望它可以重复使用,因此我可以将此代码放在用户控件中,然后在应用程序周围放置许多这些图像,然后选择显示哪一个。

像这样:

<CanvasImage Image="Pie"/>
<CanvasImage Image="Dog"/>

将它们全部在用户控件视图中声明并使用可见性绑定

,计算成本是否太高

Pie canvas示例:

<canvas>
    <Data ="m24,98,07">
</canvas>

狗画布示例:

<canvas>
    <image source="">
<canvas>

1 个答案:

答案 0 :(得分:0)

此转换器直接返回图像源,具体取决于它接收的值。

UPDATE table_name SET  column_name=replace(column_name, '\t', '') //Remove all tab

XAML中的用法:

namespace TestTreeView.Views
{
    public class StringToImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string file = "";

            string v = value as string;
            switch (v)
            {
                case "Pie":
                    file = @".\path\to\your\pie.jpg";
                    break;
                case "Dog":
                    file = @".\path\to\your\dog.jpg";
                    break;
                default:
                    return null;
            }

            return new BitmapImage(new Uri(file, UriKind.RelativeOrAbsolute));
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

原始回答

我认为您需要使用转换器 它将采用一个ConverterParameter,一个String,它将告诉绑定值是什么,并返回一个Visiblity来指示画布是否应该可见。

<Window xmlns:local="clr-namespace:YourNamespace.Views" ...>
    <Window.Resources>
        <local:StringToImageConverter x:Key="stringToImageConverter"/>
    </Window.Resources>

    <Grid>
        <Canvas>
            <Image Source="{Binding YourString, Converter={StaticResource stringToImageConverter}}"/>
        </Canvas>
    </Grid>
</Window>

XAML中的用法:

namespace YourNamespace.Views
{
    public class StringToCanvasVisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string v = value as string;
            string p = parameter as string;
            return (v != null && p != null && v == p) ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}