我有一个名为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
,这带来了新的问题。所以我现在不知所措。如果有任何建议,我将不胜感激。
由于
答案 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[]
更改为IEnumerable
(IEnumerable<string>
无效)并且它可以正常工作。缺点是您放松了类型检查。
我也遇到了普通属性的问题,我必须为Urls
创建一个附加的属性。