2010-05-19 30 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