0

WinRTプロジェクトのIsCheckedプロパティに関して画像を変更するImageToggleButtonを作成しようとしています。

VisualStudio2012およびVisualStudioExpress for Windows 8のデザイナーでは、ToggleButtonは期待どおりに動作しますが、実行時に画像が表示されません。

何か案は?

XAML:
    <Page.Resources>
      <local:BooleanImageConverter x:Name="BoolImgConverter"/>
    </Page.Resources>

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
      <ToggleButton HorizontalAlignment="Left" Height="200" Margin="260,205,0,0" VerticalAlignment="Top" Width="833" Background="Yellow">
        <Image Source="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.IsChecked, Converter={StaticResource BoolImgConverter}, ConverterParameter=Assets/chkMusic}"/>
      </ToggleButton>
    </Grid>

CodeBehind:
    public class BooleanImageConverter : IValueConverter
    {
      public object Convert(object value, Type targetType, object parameter, string culture)
      {
        bool state = (bool)value;
        string baseName = (string)parameter;

        return string.Format("{0}_{1}checked.png", baseName, state ? "" : "un");
      }

      public object ConvertBack(object value, Type targetType, object parameter, string culture)
      {
        return null;
      }
   }

コードの説明:

画像コントロールをToggleButtonに配置し、IsCheckedに従って指定されたConverterParameterを装飾するコンバーターを使用して、含まれている(親)ToggleButtonのIsCheckedプロパティに画像ソースをバインドし、目的の画像ファイルを参照する文字列を提供します。

確かにこれはコードビハインドで実行できますが、可能な限りXAMLで実行したいと思います。

現時点では、ControlTemplateを作成した後ではなく、RelativeSource FindAncestorやこのフォーラムの他の提案を試したはずですが、これらはWindows Store Appsでは機能しなかったようです(または間違っていますか?)。

何か提案をいただければ幸いです。

ありがとう

(ところで:私はこの投稿にタグとしてwindows-store-appを追加しようとしましたが、この新しいタグを作成できませんでした-他の誰かがこれを行うでしょうか)

4

1 に答える 1

0

親はあなたが思うように働いたことはありません。必要なことを達成するには、いくつかの方法があります。

1 つ目は、RelativeSource バインディングを維持し、IsChecked へのパスを削除することです。これにより、コントロールがコンバーターに渡されます。その中で、VisualTreeHelper を使用して親を取得できます。

2 つ目は、ToggleButton に名前を付け、ElementName バインディングを使用してそれにバインドすることです。

<ToggleButton x:Name="MusicToggle" HorizontalAlignment="Left" Height="200" Margin="260,207,-793,-207" VerticalAlignment="Top" Width="833" Background="Yellow">
    <Image Source="{Binding IsChecked, ElementName=MusicToggle, Converter={StaticResource BoolToImage}, ConverterParameter=Assets/chkMusic}"/>

于 2012-09-17T06:41:23.473 に答える