سؤال

ولقد خلق غرار مربع القائمة في WPF بحيث يتم تقديمها على أنها قائمة مربع.

عند I تجميع العناصر مربع القائمة يدويا، التصميم يعمل تماما. ومع ذلك، عندما بدلا من ذلك ربط وItemsSource ل ListBox إلى مورد ثابت (وهو ItemsControl تحتوي على العناصر المطلوبة)، يتم إسقاط التصميم تماما.

وهنا هو نمط:

<Style x:Key="CheckBoxListStyle" TargetType="ListBox">
    <Style.Resources>
        <Style TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Grid Margin="2">
                            <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
                            <ContentPresenter
                                Grid.Column="1"
                                Margin="2,0,0,0" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Style.Resources>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Vertical"  />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Background" Value="Transparent" />
</Style>

وهنا هو رمز للمربع القائمة الذي يظهر النمط بشكل صحيح:

<ListBox x:Name="ColumnsList"
            Grid.Column="0"
            Grid.Row="0"
            Style="{StaticResource CheckBoxListStyle}"
            BorderThickness="1">                                                
            <ListBox.Items>
                <ListBoxItem>Test</ListBoxItem>
                <ListBoxItem>Test2</ListBoxItem>
                <ListBoxItem>Test3</ListBoxItem>
            </ListBox.Items>
        </ListBox>

وهنا هو رمز للمربع القائمة الذي يتجاهل نمط:

<ListBox x:Name="ColumnsList2"
            Grid.Column="0"
            Grid.Row="0"
            Style="{StaticResource CheckBoxListStyle}"
            BorderThickness="1"
            ItemsSource="{Binding Source={StaticResource Test1}, Path=Items}">
        </ListBox>

وعلى أمل أن نجد المساعدة - أنا جميلة جديدة إلى كل هذا ولقد حاولت كل ما يمكن ان يخطر، ولكن كل شيء لقد قرأت يقودني إلى الاعتقاد بأن تحديد ItemsSource يجب أن يكون نفس النتيجة كما وضع العناصر يدويا، لذلك لا أستطيع أن أرى أي سبب لماذا هذا لن يجدي نفعا.

شكرا،

وAT

هل كانت مفيدة؟

المحلول

وتغيير Style.Resources لتعيين الخاصية ItemContainerStyle وينبغي لها أن تعمل وكأنه سحر.

    <Style x:Key="CheckBoxListStyle" TargetType="ListBox">
    <Setter Property="ItemContainerStyle">
        <Setter.Value>
            <Style TargetType="ListBoxItem">
                <Setter Property="Template">
                    <Setter.Value>
                            <ControlTemplate TargetType="ListBoxItem">
                            <Grid Margin="2">
                                <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="Auto" />
                                        <ColumnDefinition />
                                </Grid.ColumnDefinitions>
                                <CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
                                <ContentPresenter
                                    Grid.Column="1"
                                    Margin="2,0,0,0" />
                            </Grid>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Setter.Value>
    </Setter>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Vertical"  />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Background" Value="Transparent" />
</Style>

في الإصدارات القديمة (قبل SP1)، عند تعريف Styles في نمط واحد من هؤلاء أسلوب سيتم تجاهل. بدلا من ذلك، يمكنك تعيين الموارد من نمط في الموارد الأم ..

وآمل أن يساعد هذا!

نصائح أخرى

وذلك لأن TargetType الخاصة بك في CheckListBoxStyle ويستهدفون في ListBoxItem، ولكن عند تعيين الخاصية ItemSource ل ListBox كنت ملزمة لقائمة من العناصر الأخرى ([إينتس] على سبيل المثال). وهذا يعني نوع الهدف الخاص بك يجب أن تكون كثافة العمليات بدلا من ListBoxItem.

وبدلا من ذلك لم تقم بتحديد نوع الهدف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top