Silverlight for Windows Embedded プロジェクトに取り組んでいます。イメージ コントロールで構成されるカスタム ユーザー コントロールを定義しました。カスタム コントロールの異なるインスタンスに対して、xaml で異なる画像ソースを指定したいと考えています。そこで、カスタム コントロールで Dependency Property "MyImage" を定義します。
Blend C# コード ビハインドの場合: public UserControl1() { InitializeComponent(); ItemImage.DataContext = これ; }
public ImageSource MyImage
{
get { return (ImageSource)GetValue(MyImageProperty); }
set { SetValue(MyImageProperty, value); }
}
public static readonly DependencyProperty MyImageProperty =
DependencyProperty.Register("MyImage", typeof(ImageSource), typeof(UserControl1), null);
UserControl.xaml で、イメージ コントロールの Source プロパティを MyImage にバインドします。
<Image x:Name="ItemImage" Margin="0,0,90,0" Source="{Binding MyImage}"/>
したがって、カスタム コントロールを使用すると、xaml でこれを行うことができます。
<local:UserControl1 HorizontalAlignment="Left" Margin="94,117,0,0" Width="196" Height="85" VerticalAlignment="Top" MyImage="img1.png"/>
<local:UserControl1 HorizontalAlignment="Left" Margin="94,217,0,0" Width="196" Height="85" VerticalAlignment="Top" MyImage="img2.png"/>
Blend でのテストは問題ありません。2 つのカスタム コントロール インスタンスに表示されている 2 つの画像を確認できます。
次に、SWE C++ コード ビハインドに移り、UserControl1.cpp で Dependency プロパティを再定義して登録します。
XRDependencyPropertyMetaData dpmImage = XRDependencyPropertyMetaData();
dpmImage.Size = sizeof(IXRImageSource);
dpmImage.pfnPropertyChangeNotification = ImagePropertyChanged;
dpmImage.pfnTypeConverter = ConvertNameTypeConverter;
dpmImage.pfnEnumerableCreation = NULL;
XRValue defImage;
defImage.vType = VTYPE_OBJECT;
defImage.pObjectVal = NULL;
dpmImage.DefaultValue = defImage;
hr = pApplication->RegisterDependencyProperty(L"MyImage", VTYPE_OBJECT, ControlID(), &dpmImage, &m_dpMyImageID);
void UserControl1::ImagePropertyChanged( __in IXRDependencyObject* pControl, __in XRValue* pOldValue, __in XRValue* pNewValue )
{......}
HRESULT UserControl1::ConvertNameTypeConverter( XRValue *pValIn, XRValue *pValOut )
{......}
コンパイルと実行は成功しましたが、2 つのコントロールに画像が表示されていません。
デバッグ時に、ConvertNameTypeConverter コールバックが最初に呼び出されていることがわかります。イメージ ファイル名が文字列として pValIn に格納されていることがわかります。これは、MSDN ドキュメントの説明と一致しています。Windows Embedded の XAML が解析フェーズでこの関数を呼び出すと、pValIn は常に文字列になります。
次に ImagePropertyChanged コールバックが呼び出され、ConvertNameTypeConverter() で pValOut に設定した値が pNewValue に含まれていることがわかります。
私の質問は、私は正しい方法でやっていますか? 画像ファイル名の文字列しか取得できない場合、文字列から画像バイナリを取得するにはどうすればよいですか?
画像バイナリを xaml から C++ コード ビハインドに直接転送して直接表示する方法はありますか?
ありがとう!