سؤال

لدينا سيناريو حيث نريد لعرض قائمة من البنود وتشير وهو موضوع البند "الحالي" (مع القليل من علامة السهم أو لون الخلفية المتغير).

وItemsControl ليس جيدا لنا، لأننا بحاجة سياق "SelectedItem". ومع ذلك، ونحن نريد لتحريك التحديد programattically وعدم السماح للمستخدم لتغييره.

هل هناك طريقة بسيطة لجعل مربع القائمة غير التبادلي؟ يمكننا حلوى من قبل البلع عمدا أحداث الماوس ولوحة المفاتيح، ولكن أنا في عداد المفقودين بعض الممتلكات الأساسية (مثل وضع "ISENABLED" إلى false دون التأثير على أسلوبه البصري) الذي يعطينا ما نريد؟

وأو ... هناك سيطرة WPF آخر وهذا هو أفضل ما في العالمين - وItemsControl مع الخاصية SelectedItem

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

المحلول

وخيار واحد هو وضع ListBoxItem.IsEnabled إلى false:

<ListBox x:Name="_listBox">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="IsEnabled" Value="False"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

وهذا يضمن أن كانت العناصر ليست اختيار، لكنها قد لا تجعل كيف تحب. لحل هذه المشكلة، يمكن أن تقوم به حولها مع المشغلات و / أو القوالب. على سبيل المثال:

<ListBox x:Name="_listBox">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="IsEnabled" Value="False"/>
            <Style.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Foreground" Value="Red" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

نصائح أخرى

وكان لي نفس المشكلة. I حلها من خلال ترك مجموعة ISENABLED إلى true والتعامل مع الحدث PreviewMouseDown من مربع القائمة. في المجموعة معالج e.Handled إلى true في حال كنت لا تريد أن يتم تحريرها.

    private void lstSMTs_PreviewMouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        e.Handled = !editRights;
    }

هل لديك ItemsControl / مربع القائمة ربط بيانات؟

وأنا أفكر فقط كنت قد جعل الفرشاة خلفية كل بند من بنود ملزمة لخاصية من مصدر البيانات، أو تمرير الملكية من خلال تحويل. شيء من هذا القبيل:

  <ItemsControl DataContext="{Binding Source={StaticResource Things}}" ItemsSource="{Binding}" Margin="0">
    <ItemsControl.Resources>
      <local:SelectedConverter x:Key="conv"/>
    </ItemsControl.Resources>
    <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
        <local:Control Background="{Binding Path=IsSelected, Converter={StaticResource conv}}"/>
      </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

وعدم اختيار ListBoxItem (أو ListViewItem) وظيفة باستخدام الخصائص المرفقة: HTTP: // thrash505. wordpress.com/2011/01/04/non-selectable-listboxitem-or-listviewitem-using-attached-properties/

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