如何访问发件人自定义按钮值(从按钮继承的类)

本文关键字:按钮 继承 自定义 何访问 访问 | 更新日期: 2023-09-27 18:28:20

我想要实现的是从继承自Button的RegistrationButton.cls类访问公共属性(这样我就可以在文本块中设置绑定)。

因此,我最终可以将RegistrationButton的标题传递到下一页,这样我就可以真正知道按下了什么按钮,并从那里进一步了解。

问题:

下面的点击事件发送器属于button类型(因为它在我的xaml代码中被声明为按钮)。所以问题是,当我试图将发送方强制转换为RegistrationButton时,发送方总是NULL。当我将is强制转换为Button时,我无法访问RegistrationButton类的任何内容。

所有按钮都保存在由RegistrationButton对象组成的ObversableCollection列表中。

  private void RegistrationButton_Click(object sender, RoutedEventArgs e)
    {
        RegistrationButton b = sender as RegistrationButton;
        String buttonTitle = b.Title;
    }

我已经为这个问题挣扎了很长时间,我不知道我到底需要改变什么。xaml数据模板(如果是,具体如何?)或后面的代码?

XAML:

<ListBox  x:Name="lbRegistration" ItemsSource="{Binding RegBtns, ElementName=Window}" Background="{x:Null}" 
            BorderBrush="{x:Null}" Grid.Column="1" 
            ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Disabled" Height="75">
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal"/>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Button x:Name="RegistrationButton" HorizontalAlignment="Center" Height="71" Width="148"
                            Style="{DynamicResource ButtonStyleRegistration}"
                            Margin="10,0,5,0" 
                            Click="RegistrationButton_Click" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

按钮样式:

        <Style x:Key="ButtonStyleRegistration" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid x:Name="registrationButton">
                        <Rectangle Fill="#FF89959A" Height="Auto" RadiusY="15" RadiusX="15" Stroke="White" Width="Auto"/>
                        <TextBlock x:Name="tbOorzaak" TextWrapping="Wrap" 
                                   Text="{Binding RegistrationCount, StringFormat=Cause: '{0'}}"
                                   HorizontalAlignment="Center" Margin="7.5,7.5,0,0" Height="Auto" 
                                   VerticalAlignment="Top" FontWeight="Bold" >
                        </TextBlock>
                        <TextBlock x:Name="tbDuurStilstand" TextWrapping="Wrap" 
                            Text="{Binding RegistrationCount, StringFormat= '{0'}}" 
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center" 
                            Margin="7.5,5,0,0" Height="24.8266666666667"/>
                        <TextBlock x:Name="tbBeginStilstand" 
                            Text="{Binding RegistrationCount, StringFormat= '{0'}}"
                            TextWrapping="Wrap" Margin="7.5,0,0,7.5" 
                            VerticalAlignment="Bottom" d:LayoutOverrides="Width" 
                            HorizontalAlignment="Center" Height="Auto"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsFocused" Value="True"/>
                        <Trigger Property="IsDefaulted" Value="True"/>
                        <Trigger Property="IsPressed" Value="True"/>
                        <Trigger Property="IsEnabled" Value="False"/>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Foreground" Value="Red"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="FontSize" Value="10.667"/>
    </Style>  

致以亲切的问候。

如何访问发件人自定义按钮值(从按钮继承的类)

如果它是RegistrationButton,那么您也应该将其声明为Registration巴顿。

<my:RegistrationButton xmlns:my="clr-namespace:MyWpfProject" x:Name="RegistrationButton" HorizontalAlignment="Center" Height="71" Width="148" 
                            Style="{DynamicResource ButtonStyleRegistration}" 
                            Margin="10,0,5,0"  
                            Click="RegistrationButton_Click" /> 

请注意包含别名为my
的命名空间的xmlns当xmlns:my="clr-namespace:MyWpfProject"位于当前程序集中或
时使用如果RegistrationButton位于另一个名为MyAssembly的程序集中的命名空间MyWpfProject中,请使用xmlns:my="clr-namespace:MyWpfProject;assembly=MyAssembly"

编辑:此外,调整包括ControlTemplateStyle,相应地将TargetType设置为TargetType="{x:Type my:RegistrationButton}"

CCD_ 8也可以放置在xaml的根中。