windows phone 8 imagebrush获取路径

时间:2013-10-26 11:41:08

标签: c# xaml windows-phone-8 windows-phone

我有这个代码

 <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。

2 个答案:

答案 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;
}