首页 > 解决方案 > 无法设置未知成员 'System.Windows.Controls.TextBox.IsReadOnly

问题描述

我正在为 ComboBox 制作样式并将此代码添加到 ComboBox 模板

...
<TextBox x:Name="PART_EditableTextBox"
         Style="{x:Null}"
         Template="{StaticResource ComboBoxTextBox}"
         HorizontalAlignment="Left"
         VerticalAlignment="Bottom"
         Margin="{TemplateBinding Padding}"
         Focusable="True"
         Background="Transparent"
         Visibility="Hidden"
         IsReadOnly="{TemplateBinding IsReadOnly}" />
...

问题出在IsReadOnly="{TemplateBinding IsReadOnly}"财产上。Visual Studio 告诉这是一个未知成员,并且不会在设计器中呈现 ComboBox。但是,如果我启动该项目,它将正常工作。顺便说一句, ComboBox 有 property IsReadOnly。如何解决这个故障?

更新:组合框模板

<Style TargetType="{x:Type ComboBox}">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.CanContentScroll" Value="true" />
    <Setter Property="MinWidth" Value="120" />
    <Setter Property="MinHeight" Value="20" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ComboBox}">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="20"/>
                    </Grid.ColumnDefinitions>
                    
                    <ToggleButton x:Name="ToggleButton" Grid.ColumnSpan="2"
                                  Template="{StaticResource ComboBoxToggleButtonTemplate}"
                                  Focusable="False" ClickMode="Press"
                                  IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"
                                  />
                    <ContentPresenter x:Name="ContentSite" Grid.Column="0"
                                      IsHitTestVisible="False"
                                      Content="{TemplateBinding SelectionBoxItem}"
                                      ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
                                      ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
                                      Margin="{TemplateBinding Padding}"
                                      VerticalAlignment="Stretch"
                                      HorizontalAlignment="Left" />
                    <TextBox x:Name="PART_EditableTextBox"
                             Style="{x:Null}"
                             Template="{StaticResource ComboBoxTextBox}"
                             HorizontalAlignment="Left"
                             VerticalAlignment="Bottom"
                             Margin="{TemplateBinding Padding}"
                             Focusable="True"
                             Background="Transparent"
                             Visibility="Hidden"
                             IsReadOnly="{TemplateBinding IsReadOnly}" />
                    <!--IsReadOnly="{TemplateBinding IsReadOnly}"-->

                    <Border x:Name="Overlay" Grid.ColumnSpan="2" CornerRadius="5" Margin="-2" BorderThickness="3" BorderBrush="{StaticResource InputBorderFocused}" Visibility="Hidden"/>
                    
                    <Popup x:Name="Popup"
                             Placement="Bottom"
                             IsOpen="{TemplateBinding IsDropDownOpen}"
                             AllowsTransparency="True"
                             Focusable="False"
                             PopupAnimation="Slide">
                        <Grid x:Name="DropDown" SnapsToDevicePixels="True" MinWidth="{TemplateBinding ActualWidth}"
                                  MaxHeight="{TemplateBinding MaxDropDownHeight}">
                            <Border x:Name="DropDownBorder" BorderThickness="1"
                                    BorderBrush="{DynamicResource InputBorder}"
                                    Background="{DynamicResource InputBackground}"/>
                            
                            <ScrollViewer Margin="0" SnapsToDevicePixels="True">
                                <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                            </ScrollViewer>
                        </Grid>
                    </Popup>
                </Grid>

                <ControlTemplate.Triggers>
                    <Trigger Property="HasItems" Value="false">
                        <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95" />
                    </Trigger>
                    <Trigger Property="IsGrouping" Value="true">
                        <Setter Property="ScrollViewer.CanContentScroll" Value="false" />
                    </Trigger>
                    <Trigger SourceName="Popup" Property="AllowsTransparency" Value="true">
                        <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0" />
                    </Trigger>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter Property="Visibility" Value="Visible" TargetName="Overlay"/>
                    </Trigger>
                    <Trigger Property="IsDropDownOpen" Value="True">
                        <Setter Property="Visibility" Value="Visible" TargetName="Overlay"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

标签: wpfxaml

解决方案


推荐阅读