Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 当图像源有效(非空)时隐藏文本的触发器_.net_Wpf - Fatal编程技术网

.net 当图像源有效(非空)时隐藏文本的触发器

.net 当图像源有效(非空)时隐藏文本的触发器,.net,wpf,.net,Wpf,因此,我有一个带有图像列的DataGrid,我希望能够在图像具有有效(非空)源时隐藏“浏览…”超链接。如何做到这一点 这是我的XAML: <DataGridTemplateColumn Header="Image"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding ChangeImageComman

因此,我有一个带有图像列的DataGrid,我希望能够在图像具有有效(非空)源时隐藏“浏览…”超链接。如何做到这一点

这是我的XAML:

<DataGridTemplateColumn Header="Image">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Command="{Binding ChangeImageCommand}">
                <Button.Template>
                    <ControlTemplate>
                        <Grid>
                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
                                <Hyperlink Command="{Binding ChangeImageCommand}">Browse...</Hyperlink>
                            </TextBlock>
                            <Image Source="{Binding Image}" Margin="0"/>
                        </Grid>
                    </ControlTemplate>
                </Button.Template>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

浏览。。。

哦,如果有更简单的方法来实现带有替代文本的图像按钮,请让我知道!:-)

默认情况下使TextBlock不可见,并为
Image.Source==null

比如:

<DataGridTemplateColumn Header="Image">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Command="{Binding ChangeImageCommand}">
                <Button.Template>
                    <ControlTemplate>
                        <Grid>
                            <TextBlock Name="TextBlock" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed">
                                <Hyperlink Command="{Binding ChangeImageCommand}">Browse...</Hyperlink>
                            </TextBlock>
                            <Image Name="Image" Source="{Binding Image}" Margin="0"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger SourceName="Image"
                                     Property="Source"
                                     Value="{x:Null}">
                                <Setter TargetName="TextBlock"
                                        Property="Visibility"
                                        Value="Visible"/>
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Button.Template>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

    
        
            
                
                    
                        
                            
浏览。。。
                            
                            
                        
                    
                
            
        
    

您可以使用ValueConverter将图像绑定到可见性。一个基于空值的简单转换器如下所示:

public class VisibilityConverter : IValueConverter
{
    public Visibility True { get; set; }
    public Visibility False { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (value != null ? True : False);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<Window.Resources>
    <loc:VisibilityConverter x:Key="ImageConverter" True="Visible" False="Collapsed"/>
    <loc:VisibilityConverter x:Key="BrowseConverter" True="Collapsed" False="Visible"/>
</Window.Resources>
. . .
<DataGridTemplateColumn Header="Image">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Command="{Binding ChangeImageCommand}">
                <Grid>
                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
                        Visibility="{Binding Image, Converter={StaticResource BrowseVisibility}}">
                        Browse...
                    </TextBlock>
                    <Image Source="{Binding Image}" Margin="0"
                        Visibility="{Binding Image, Converter={StaticResource ImageVisibility}}"/>
                </Grid>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
您可以在XAML资源中创建几个实例,用于控制元素的可见性。此外,您不需要为按钮设置模板,因为WPF按钮可以包含您希望它们包含的任何内容(不仅仅是文本)。因此,您的XAML可以如下所示:

public class VisibilityConverter : IValueConverter
{
    public Visibility True { get; set; }
    public Visibility False { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return (value != null ? True : False);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
<Window.Resources>
    <loc:VisibilityConverter x:Key="ImageConverter" True="Visible" False="Collapsed"/>
    <loc:VisibilityConverter x:Key="BrowseConverter" True="Collapsed" False="Visible"/>
</Window.Resources>
. . .
<DataGridTemplateColumn Header="Image">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button Command="{Binding ChangeImageCommand}">
                <Grid>
                    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center"
                        Visibility="{Binding Image, Converter={StaticResource BrowseVisibility}}">
                        Browse...
                    </TextBlock>
                    <Image Source="{Binding Image}" Margin="0"
                        Visibility="{Binding Image, Converter={StaticResource ImageVisibility}}"/>
                </Grid>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

. . .
浏览。。。

注意,您还需要在XAML的顶部添加。我还以为你会把这些放在你的窗口资源中。

谢谢你添加代码片段——这样做更有意义!