在Datalight 4中将DataGrid的单元格模板公开为自定义用户控件属性

时间:2011-12-12 12:48:58

标签: c# wpf silverlight xaml

我正在Silverlight 4中构建自定义用户控件。控件背后的想法是将带有分页器的数据网格从用户页面移动到控件。目前数据网格如下:

                <sdk:DataGrid x:Name="GridCustomers" Height="300" VerticalAlignment="Top" ItemsSource="{Binding CustomerModelsPagedCollectionView}" AutoGenerateColumns="False" ScrollViewer.VerticalScrollBarVisibility="Visible" IsReadOnly="True" SelectionChanged="GridCustomers_SelectionChanged">
                    <sdk:DataGrid.Columns>
                        <sdk:DataGridTextColumn Header="Numer bilingowy" Binding="{Binding BillingNumber}" />
                        <sdk:DataGridTextColumn Header="Nazwa klienta" Binding="{Binding CustomerName}"/>
                        <sdk:DataGridTextColumn Header="Skrócona nazwa" Binding="{Binding ShortCustomerName}"/>
                        <sdk:DataGridTextColumn Header="Kod pocztowy" Binding="{Binding PostalCode}" />
                        <sdk:DataGridTextColumn Header="Miasto" Binding="{Binding City}" />
                        <sdk:DataGridTextColumn Header="Ulica" Binding="{Binding Street}" />
                        <sdk:DataGridTemplateColumn Header="Urządzenia">
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <ComboBox x:Name="DeviceComboBox"  SelectionChanged="DeviceComboBox_SelectionChanged">
                                        <ComboBox.Items>
                                            <ComboBoxItem x:Name="Switch" Content="Switche"/>
                                            <ComboBoxItem x:Name="Firewall" Content="Firewalle"/>
                                            <ComboBoxItem x:Name="Host" Content="Hosty" />
                                        </ComboBox.Items>
                                    </ComboBox>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>
                        </sdk:DataGridTemplateColumn>
                    </sdk:DataGrid.Columns>
                </sdk:DataGrid>

除了从几页中删除此网格的重复代码之外,我最想实现的是为用户提供此控件的灵活性来定义该模板列。换句话说,我正在尝试公开DataGrid列属性,因此可以添加不同的DataGridTemplateColumns。由于我对SL的经验很少,我做了一些研究,根据我发现的“附加属性”是我需要的(需要确认)。我使用this tutorial.这样定义了DependencyProperty(控制代码 - CustomerControl):

   public static readonly DependencyProperty ColumnTemplateProperty = DependencyProperty.RegisterAttached(
        "ColumnTemplate",
        typeof(DataGridTemplateColumn),
        typeof(CustomerControl),
        null);

public static void SetColumnTemplate(DependencyObject obj, DataGridTemplateColumn column)
{
    obj.SetValue(ColumnTemplateProperty, column);
}

public static DataGridTemplateColumn GetColumnTemplate(DependencyObject obj)
{
    return (DataGridTemplateColumn)obj.GetValue(ColumnTemplateProperty);
}

Control的XAML:

        <local:CustomerControl x:Name="temp" >
            <local:CustomerControl.ColumnTemplate>
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox x:Name="DeviceComboBox"  SelectionChanged="DeviceComboBox_SelectionChanged">
                            <ComboBox.Items>
                                <ComboBoxItem x:Name="Switch" Content="Switche"/>
                                <ComboBoxItem x:Name="Firewall" Content="Firewalle"/>
                                <ComboBoxItem x:Name="Host" Content="Hosty" />
                            </ComboBox.Items>
                        </ComboBox>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </local:CustomerControl.ColumnTemplate>
        </local:CustomerControl>

由于我暴露了'DataGridTemplateColumn'类型的属性我打了剩下的模板声明不会改变,但这不起作用:(我不确定这个附加属性。你能给我一些提示如何获得这是按照我提出的方式工作(或者我应该说'想象'我希望它如何工作)。它甚至可能吗?我知道这里存在一些重大缺陷,但只是为了记录,我得到的错误:

错误3在'DataGridTemplateColumn'类型中找不到可附加属性'CellTemplate' 错误2解析规则PropertyElement :: =中的意外PROPERTYELEMENT。 PROPERTYELEMENT内容? ENDTAG

感谢您使用任何类型的指针;)

0 个答案:

没有答案