如何在单独的XAML文件中设置图像的URI列表

时间:2012-02-21 10:17:47

标签: c# wpf xaml

我有一个名为ControlElement的{​​{1}},它是一个元素,应该使用我希望能够切换的图像的列表/数组URI进行初始化。

MultiImageDevice的XAML代码:

MultiImageDevice

和C#-Code(不使用指令):

<component:AbstractDevice x:Class="View.MultiImageDevice"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         xmlns:component="clr-namespace:View"
         x:Name="userControl"
         d:DesignHeight="100" d:DesignWidth="100">
    <Canvas Initialized="Level1Canvas_Initialized" Height="{Binding ElementName=userControl, Path=ActualHeight}" Width="{Binding ElementName=userControl, Path=ActualWidth}">
        <Canvas Initialized="Level2FrameworkElement_Initialized">
            <Image x:Name="image" Source="{Binding Path=ImageSources[0], RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type component:MultiImageDevice}}}"  Height="{Binding ElementName=userControl, Path=ActualHeight}" Width="{Binding ElementName=userControl, Path=ActualWidth}">
                <Image.Effect>
                    <DropShadowEffect BlurRadius="10" Opacity="0.5" ShadowDepth="3"/>
                </Image.Effect>
            </Image>
        </Canvas>
    </Canvas>
</component:AbstractDevice>

最后但并非最不重要的是单独的XAML中的电话:

namespace View
{
    public partial class MultiImageDevice : AbstractDevice
    {
        private double _currentImage = 1d;
        internal string[] ImageURIs { get; set; }

        public MultiImageDevice()
        {
            InitializeComponent();
        }

        public override void PositionChangedSignal(ComponentIdentifier identifier, double position)
        {
            if (_currentImage != position)
            {
                _currentImage = position;
                //Switching shall occur here
            }
        }
    }
}

此方法的问题是编译器错误,指出我无法将<component:MultiImageDevice Height="60" Canvas.Left="56.104" Canvas.Top="409.859" Width="60"> <component:MultiImageDevice.ImageURIs> <x:Array Type="sys:String"> <sys:String> pack://application:,,/img/AuxReleaseCancelButton_pushed.png </sys:String> </x:Array> </component:MultiImageDevice.ImageURIs> </component:MultiImageDevice> 添加到ArrayExtension-Type。我还尝试离开String[]-Type或在<x:Array>-part中将数组声明为Resource,这带来了新的问题。所以我现在不知所措。如果有任何建议,我将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

我在这个例子中找到了这个page

<ListBox>
  <ListBox.ItemsSource>
    <x:Array Type="{x:Type sys:String}">
      <sys:String>John</sys:String>
      <sys:String>Paul</sys:String>
      <sys:String>Andy</sys:String>
    </x:Array>
  </ListBox.ItemsSource>
</ListBox>

ItemSource属性属于IEnumerable类型。所以我在我的虚拟控件中将string[]更改为IEnumerableIEnumerable<string>无效)并且它可以正常工作。缺点是您放松了类型检查。

我也遇到了普通属性的问题,我必须为Urls创建一个附加的属性。