我试图为我的WinRT项目创建一个ImageToggleButton,它改变了它的IsChecked属性的图像。Metro/Windows Store应用程序:相对图像源绑定不起作用?
在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;
}
}
代码描述:
我把一个图像控制到切换按钮并结合所述图像源到含有(父)的属性器isChecked切换按钮使用装饰给定的根据ConverterParameter器isChecked一个转换器提供字符串来引用所需的图像文件。
当然,我可以在代码背后做到这一点,但我希望尽可能在XAML中做到这一点。
目前,我也没有建立一个ControlTemplate后,我会尝试RelativeSource FindAncestor和这个论坛的其他建议,但这些似乎没有在Windows Store应用程序(或我错了?)。
我会很感激任何建议。
感谢
(顺便说一句:我想作为标签添加Windows商店,应用这个职位,但不能创建新的标签 - 将别人做到这一点)
以下测试Shawns提示后,我算了一下,该结合不会引发此版本的转换器无论是。在启动时只有一次,但从不单击ToggleButton时。 –