WPF TreeView禁用子选择

时间:2018-04-19 04:55:48

标签: c# wpf

我正在寻找一种方法来禁用WPF TreeView的内置操作。在WPF中,当您选择TreeView的父节点时,它还会选择该组中的所有子节点。我不想要这个。我想要的是单一选择。这是一张显示当前情况的图片:

enter image description here

同样,我想要的只是选择单行。

以下是我目前正在使用的XAML:

import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
import org.apache.kafka.clients.producer.ProducerConfig;

import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

import pojo.JsonToPojo;

public class KafkaSender {

    public void sendtoKafka(List<JsonToPojo> data) {

        Properties props = new Properties();
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "0.0.0.0:9092");
        props.put(ProducerConfig.CLIENT_ID_CONFIG, "KafkaExampleProducer");
        props.put(ProducerConfig.ACKS_CONFIG, "all");
        props.put(ProducerConfig.RETRIES_CONFIG, 5);
        props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);
        props.put(ProducerConfig.LINGER_MS_CONFIG, 1);
        props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, 80554432);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,  "org.apache.kafka.common.serialization.StringSerializer");
        props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, "60000");
        Producer<String, JsonToPojo> producer = new KafkaProducer<String, JsonToPojo>(props);
        TestCallback callback = new TestCallback();

        for (JsonToPojo toKafka : data) {

            ProducerRecord<String, JsonToPojo> record = new ProducerRecord<String, JsonToPojo>("dontknow", toKafka.group_city.toString(), toKafka);

            // RecordMetadata metadata = producer.send(record).get();
            // System.out.println("Hey" + metadata.topic());

            producer.send(record, callback);
        }
        producer.close();
    }

    private static class TestCallback implements Callback {
        @Override
        public void onCompletion(RecordMetadata recordMetadata, Exception e) {
            if (e != null) {
                System.out.println("Error while producing message to topic :" + recordMetadata);
                e.printStackTrace();
            } else {
                String message = String.format("sent message to topic:%s partition:%s  offset:%s",
                        recordMetadata.topic(), recordMetadata.partition(), recordMetadata.offset());
                System.out.println(message);
            }
        }
    }
}

有没有人知道如何更改此XAML,或者指出我如何只允许单行选择?所需行为的一个很好的例子是Visual Studio如何处理它的解决方案树视图。你只能做单一选择,除非你刻意按住班次或其他东西。

1 个答案:

答案 0 :(得分:2)

IsSelected样式的TreeViewItem触发器中,您正在更改itemGrid的背景颜色。 itemGrid包含所有内容 - 标题子项。尝试定位更具体的内容(例如边框Bd):

<Trigger Property="IsSelected" Value="true">
    <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}" />
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}" />
</Trigger>