2010-05-19 23 views
0

我有一个基于值0,1的要求,我正在显示图像。如何使图像在数据网格中不可见时使按钮不可见

如果值为0我没有显示图像。

如果值为1我正在显示图像。

但在这里,当我没有显示行的图像。我甚至想让按钮不显示?

现在我甚至需要按钮不显示图像时不显示。该行

我怎样才能解决这个问题

链接显示如何screen shot

这是我的XAML代码。其作品

<Button x:Name="myButton" 
          Click="myButton_Click"> 
           <StackPanel Orientation="Horizontal"> 
            <Image Margin="2, 2, 2, 2" x:Name="imgMarks" Stretch="Fill" Width="12" Height="12" 
              Source="Images/detail.JPG" 
              VerticalAlignment="Center" 
              HorizontalAlignment="Center" 
             Visibility="{Binding Level, Converter={StaticResource LevelToVisibility}}" 
            /> 


           </StackPanel> 
          </Button> 

这是我的XAML代码

<UserControl x:Class="SLGridImage.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:sdk="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" 
    xmlns:local="clr-namespace:SLGridImage" 

    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="400" > 

    <UserControl.Resources> 
     <local:LevelToVisibilityConverter x:Key="LevelToVisibility" /> 
    </UserControl.Resources> 


    <Grid x:Name="LayoutRoot" Background="White"> 
     <sdk:DataGrid x:Name="dgMarks" CanUserResizeColumns="False" SelectionMode="Single" 
       AutoGenerateColumns="False" 
         VerticalAlignment="Top" 
         ItemsSource="{Binding MarkCollection}" 
         IsReadOnly="True" 
         Margin="13,44,0,0" 
         RowDetailsVisibilityMode="Collapsed" Height="391" 
         HorizontalAlignment="Left" Width="965" 
         VerticalScrollBarVisibility="Visible" > 
      <sdk:DataGrid.Columns> 
       <sdk:DataGridTemplateColumn> 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button x:Name="myButton" 
          Click="myButton_Click"> 
           <StackPanel Orientation="Horizontal"> 
            <Image Margin="2, 2, 2, 2" x:Name="imgMarks" Stretch="Fill" Width="12" Height="12" 
              Source="Images/detail.JPG" 
              VerticalAlignment="Center" 
              HorizontalAlignment="Center" 
             Visibility="{Binding Level, Converter={StaticResource LevelToVisibility}}" 
            /> 


           </StackPanel> 
          </Button> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 
       <sdk:DataGridTemplateColumn Header="Name" > 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate > 
          <Border> 
           <TextBlock Text="{Binding Name}" /> 
          </Border> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 

       <sdk:DataGridTemplateColumn Header="Marks" Width="80"> 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Border> 
           <TextBlock Text="{Binding Marks}" /> 
          </Border> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 
      </sdk:DataGrid.Columns> 
     </sdk:DataGrid> 
    </Grid> 
</UserControl> 

in .cs code 



using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.Collections.ObjectModel; 
using System.ComponentModel; 

namespace SLGridImage 
{ 
    public partial class MainPage : UserControl 
    { 
     private MarksViewModel model = new MarksViewModel(); 
     public MainPage() 
     { 
      InitializeComponent(); 
      this.DataContext = model; 

     } 

     private void myButton_Click(object sender, RoutedEventArgs e) 
     { 

     } 



    } 

    public class MarksViewModel : INotifyPropertyChanged 
    { 

     public MarksViewModel() 
     { 

      markCollection.Add(new Mark() { Name = "ABC", Marks = 23, Level = 0 }); 
      markCollection.Add(new Mark() { Name = "XYZ", Marks = 67, Level = 1 }); 
      markCollection.Add(new Mark() { Name = "YU", Marks = 56, Level = 0 }); 
      markCollection.Add(new Mark() { Name = "AAA", Marks = 89, Level = 1 }); 

     } 


     private ObservableCollection<Mark> markCollection = new ObservableCollection<Mark>(); 
     public ObservableCollection<Mark> MarkCollection 
     { 
      get { return this.markCollection; } 
      set 
      { 
       this.markCollection = value; 
       OnPropertyChanged("MarkCollection"); 
      } 
     } 


     public event PropertyChangedEventHandler PropertyChanged; 

     public void OnPropertyChanged(string propName) 
     { 
      if (PropertyChanged != null) 
       this.PropertyChanged(this, new PropertyChangedEventArgs(propName)); 
     } 

    } 

    public class Mark 
    { 
     public string Name { get; set; } 
     public int Marks { get; set; } 
     public int Level { get; set; } 
    } 

    public class LevelToVisibilityConverter : System.Windows.Data.IValueConverter 
    { 
     #region IValueConverter Members 

     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      Visibility isVisible = Visibility.Collapsed; 
      if ((value == null)) 
       return isVisible; 
      int condition = (int)value; 
      isVisible = condition == 1 ? Visibility.Visible : Visibility.Collapsed; 
      return isVisible; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 

     #endregion 
    } 


} 

寻找一个解决方案。请帮我出

感谢

王子

回答

2

使用元素绑定绑定到图片上的Visibility属性:

<Button x:Name="myButton" Visibility={Binding Visibility, ElementName=imgMarks} Click="myButton_Click" > 

编辑:我刚刚检查了您的XAML和实现该图像是按钮的内容 - 你为什么不动这行:

Visibility="{Binding Level, Converter={StaticResource LevelToVisibility}}" 

到按钮而不是它的在图像上?

+0

感谢slugster – happysmile 2010-05-19 13:46:50