自定义控件 - 如何将转换器添加到现有控件?

时间:2016-03-08 04:35:06

标签: c# wpf custom-controls

我有第三方控制权。我想为此控件添加一些特定的行为,这些行为可以重复使用到我的项目的任何部分。当然,自定义控制是可行的选择。但是,我不确定在自定义控件上提供新转换器的最佳方法是什么,它是在现有控件的基础上构建的。有人可以帮帮我吗?

我试图覆盖的控件属于第三方,我想为其控件在其DataTemplate中使用的ItemControl之一提供Converter。我可以很容易地确定我需要在XAML中指定新转换器的位置,但是如何通过代码指定这个以创建自定义控件令我望而生畏。对我来说,挑战在于如何在代码中获取绑定属性。对于所有客户端,转换器将保持静态,但字符串将作为转换器参数传递,我想通过每个引用代码提交。

以下是DataTemplate的代码片段 -

<DataTemplate x:Key="{themes:PdfViewerThemeKey ResourceKey=PdfPrintEditorTemplate}">
        <Grid>                
            <dxlc:DockLayoutControl x:Name="PART_DockLayoutControl" AllowItemSizing="True" Margin="5">
                <dxlc:LayoutGroup x:Name="PART_DockPreviewPart" Orientation="Vertical" dxlc:DockLayoutControl.Dock="Left" Margin="5" Width="427">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <dxe:ImageEdit x:Name="PART_ImagePreview" ShowMenu="False" Grid.Row="0" Margin="0,0,0,10" EditValue="{Binding Path=PdfViewModel.PreviewImageBytes, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Width="427" Height="518"/>                            
                    </Grid>
                </dxlc:LayoutGroup>
                <dxlc:LayoutGroup x:Name="PART_DockClientPart" ItemLabelsAlignment="Local" MinWidth="425" Margin="5" Orientation="Vertical" dxlc:DockLayoutControl.Dock="Client" dxlc:DockLayoutControl.AllowHorizontalSizing="True">
                    <dxlc:LayoutItem Label="{Binding Source={x:Null}, Converter={StaticResource PdfViewerStringIdConverter}, ConverterParameter=PrintDialogPrinterName}" AddColonToLabel="True">
                        <dxlc:LayoutGroup Orientation="Horizontal">
                            <dxlc:LayoutItem VerticalContentAlignment="Center" VerticalAlignment="Center">
                                <dxe:ComboBoxEdit Margin="5,0,0,0" ItemsSource="{Binding Path=PdfViewModel.PrinterItems}" ApplyItemTemplateToSelectedItem="True" IsTextEditable="False" SelectedIndex="{Binding Path=PdfViewModel.PrinterIndex}">
                                    <dxe:ComboBoxEdit.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel Orientation="Horizontal">
                                                <dxe:ImageEdit ShowBorder="False" Source="{Binding Path=PrinterType, Converter={StaticResource printerTypeToImageConverter}}"/>
                                                <TextBlock VerticalAlignment="Center" Margin="2,2,4,2" Text="{Binding Path=DisplayName}"/>
                                            </StackPanel>
                                        </DataTemplate>
                                    </dxe:ComboBoxEdit.ItemTemplate>
                                </dxe:ComboBoxEdit>                                    
                            </dxlc:LayoutItem>                                
                        </dxlc:LayoutGroup>
                    </dxlc:LayoutItem>

                </dxlc:LayoutGroup>
            </dxlc:DockLayoutControl>
        </Grid>
    </DataTemplate>

请告诉我实施此方法的最佳方法。

0 个答案:

没有答案