2012-02-21 10 views
0

ControlElementという名前のMultiImageDeviceがあります。この画像は、リスト/ URIの配列で初期化する必要があります。個別のXAMLファイルに画像のURIリストを設定する方法

MultiImageDeviceためのXAML-コード:

<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> 

と(ディレクティブを使用せずに)C#-code:

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 
      } 
     } 
    } 
} 

そして最後にではなく、少なくとも別々のXAMLでのコール:

<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> 

このアプローチの問題は、私がを追加できないというコンパイラのエラーですからString[]-Typeまでである。また、<x:Array>-partを残してみたり、MultiImageDeviceResourceという配列を宣言して、新しい問題が発生しました。だから私は今失われている。私はどんな提案にも感謝します。

おかげ

+0

これは、XAML http://msdn.microsoft.com/en-us/library/ms752340.aspxの文字列配列を記述するMSDNページです。名前空間の指定が不足している可能性があります。 –

+0

私はそれを読んで、私は名前空間の仕様を持っています:) – Nessuno

+0

本当にコンパイラエラーが出ますか、それともXAMLエディタの警告ですか?このようなことをしようとすると、XAMLで警告されますが、それでも実行されます。警告を回避するには、配列をコンポーネントのリソースディクショナリに配置します。 – Clemens

答えて

1

私はItemSourceプロパティがIEnumerable型である

<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> 

この例で、このpageを見つけました。だから、string[]IEnumerableに変更しました(IEnumerable<string>は機能しません)。ダミーのコントロールで動作します。欠点は、タイプチェックが緩んでいることです。

私はplainプロパティにも問題があり、Urlsの添付ファイルを作成する必要があります。

+0

はい、 'Type'はコンパイル時に解決されない配列のようです。 'object []'も動作します。 – Clemens

関連する問題