我正在尝试为我的 WinRT 项目创建一个 ImageToggleButton,以更改其 IsChecked 属性的图像。
在 Visual Studio 2012 和 Visual Studio Express 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;
}
}
代码说明:
我将 Image 控件放入 ToggleButton 并使用转换器将图像源绑定到包含(父)ToggleButton 的 IsChecked 属性,该转换器根据 IsChecked 装饰给定的 ConverterParameter 以提供字符串以引用所需的图像文件。
当然我可以在后面的代码中执行此操作,但我更愿意尽可能在 XAML 中执行此操作。
目前我也没有在构建 ControlTemplate 之后,我会尝试 RelativeSource FindAncestor 和该论坛的其他建议,但这些似乎在 Windows 应用商店应用程序中不起作用(或者我错了吗?)。
我会很感激任何建议。
谢谢
(顺便说一句:我试图将 windows-store-app 作为标签添加到这篇文章中,但无法创建这个新标签 - 其他人会这样做吗)