首页 > 解决方案 > 如何为自定义用户控件提供数据触发器属性?

问题描述

我已经为数据网格创建了自定义用户控件作为 CustomDatagrid。我在另一个用户控件中使用该自定义数据网格作为 DatagridUserControl。我在 DatagridUserControl 的 CustomDatagrid 中添加了 Textblock。我在 DatagridUserControl 中为 Textblock 提供了 x:Name。

                                <GridControl:CustomDatagrid  Grid.Row="2" Height="260" Width="640" x:Name="GridTask"  BorderThickness="0" FontSize="24"  Foreground="White"   SelectionChanged="slmGridTask_SelectionChanged"
                                         ColumnWidth="*"  CanUserResizeColumns="False" Background="Transparent">                                                                                                                                                                                                                                                               
                                      <DataGrid.Columns>
                                        <DataGridTemplateColumn>
                                            <DataGridTemplateColumn.CellTemplate>
                                                <DataTemplate>
                                                    <Grid Margin="-50,0,0,0" HorizontalAlignment="Left">
                                                        <Grid.RowDefinitions>
                                                            <RowDefinition Height="Auto" />
                                                            <RowDefinition Height="Auto" />
                                                        </Grid.RowDefinitions>
                                                        <WrapPanel Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="-50,0,0,0">
                                                            <TextBlock Text="{Binding Name}" TextWrapping="WrapWithOverflow"
                                         TextAlignment="Justify" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="-20,0,0,0"  />                                                                
                                                        </WrapPanel>
                                                        <Grid Margin="-60,0,0,0" Grid.Row="1" >                                                                                                                             
                                                            <TextBlock  x:Name="TxtBlkDescription" Margin="0,0,0,0"  TextWrapping="Wrap"   Text="{Binding Description}" Visibility="Collapsed" FontWeight="Regular" Foreground="White" FontSize="18" FontFamily="Open Sans"  HorizontalAlignment="Left" />
                                                        </Grid>
                                                    </Grid>                                                       
                                                </DataTemplate>
                                            </DataGridTemplateColumn.CellTemplate>
                                        </DataGridTemplateColumn>
                                    </DataGrid.Columns>
                                </GridControl:CustomDatagrid>

That textblock should display only if datagridrow is selected. 所以我为 Textblock 添加了 DataTrigger 属性。

                                                    <DataTemplate.Triggers>
                                                        <DataTrigger Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType=DataGridRow}}" Value="True">                                                           
                                                            <Setter TargetName="TxtBlkDescription" Property="Visibility" Value="Visible" />
                                                        </DataTrigger>
                                                    </DataTemplate.Triggers>

但我收到以下错误

无法在元素“TextBlock”上设置名称属性值“TxtBlkDescription”。“TextBlock”在元素“SLMDatagrid”的范围内,当它在另一个范围中定义时,它已经注册了一个名称。

如何克服这个错误?

或者只有在选择 Datagridrow 的情况下,还有其他方法可以显示 Textblock 吗?

标签: c#wpfxaml

解决方案


推荐阅读