我有这个代码
<Grid Width="160" x:Name="grd">
<Grid.Background>
<ImageBrush x:Name="img" ImageSource="Assets/Icons/tab-inactive.png" />
</Grid.Background>
<TextBlock x:Name="txtacticve" Text="Rating" Tap="TextBlock_Tap_1" />
</Grid>
在点击文本块时会调用tap事件。我可以在代码后面的这个tap事件中获取imagesource的完整路径吗?我真的迷失在这里如何在我的代码隐藏事件中找到imagesource。
答案 0 :(得分:3)
一种解决方案可能是以下一种:
在您的XAML代码中,您可以将TextBlock.Tag
属性绑定到所需的Grid.Background
属性。如果你的Grid
不是第一个父代(不需要找到带有递归C#代码的必需父代),那么在XAML而不是代码中执行它可能很有用:
<Grid Width="160" x:Name="grd">
<Grid.Background>
<ImageBrush x:Name="img" ImageSource="Assets/Icons/tab-inactive.png" />
</Grid.Background>
<TextBlock x:Name="txtacticve" Text="Rating" Tap="TextBlock_Tap_1" Tag="{Binding ElementName=grd, Path=Background}" />
</Grid>
然后在你的代码中,你只需要以这种方式强制转换和使用TextBlock.Tag
属性:
private void TextBlock_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
{
var textBlock = sender as TextBlock;
if (textBlock != null)
{
var test = ((BitmapImage)((ImageBrush)textBlock.Tag).ImageSource).UriSource.OriginalString;
}
}
答案 1 :(得分:0)
试试这个。
private void TextBlock_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
{
var grid = (Grid)txtacticve.Parent;
var img = grid.Background;
var path = ((BitmapImage)(((ImageBrush)(img)).ImageSource)).UriSource.AbsolutePath;
}