开发者

LevelToVisibilityConverter in Silverlight 4

开发者 https://www.devze.com 2022-12-30 14:55 出处:网络
<UserControl x:Class=\"SLGridImage.MainPage\" xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"
<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"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

    <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/test.png"
                                           VerticalAlignment="Center"
                                           HorizontalAlignment="Center"
                                        Visibility="{Binding Level, Converter={StaticResource LevelToVisibility}}"
                                     />
                                    <TextBlock Text="{Binding Level}" TextWrapping="NoWrap"  ></TextBlock>

                                </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 :

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

when i run getting error at this line

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

The type 'local:LevelToVisibilityConverter' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.

What I am I missing here? Looking forward for an solution, thank you.


You need to include the Xml-Namespace of the Namespace where your LevelToVisibilityConverter is in your Assembly.

Assume your LevelToVisibilityConverter is in Namespace SLGridImage you have to add the XML-Namespace (xmlns:local="clr-namespace:SLGridImage") as follows

<UserControl x:Class="SLGridImage.MainPage"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:local="clr-namespace:SLGridImage"
  <!-- Rest of the declaration -->
>
</UserControl>


Add this:

xmlns:local="clr-namespace:SLGridImage"

to the start of your XAML. Use the intellisense just in case i made a small typo :) The problem is that you did not define what namespace/assembly local referred to.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号