Read-Only Vlastnosti závislostí
Toto téma popisuje vlastnosti závislosti jen pro čtení, včetně existujících vlastností závislostí jen pro čtení a scénářů a technik pro vytvoření vlastní vlastnosti závislosti jen pro čtení.
Požadavky
V tomto tématu se předpokládá, že rozumíte základním scénářům implementace vlastnosti závislosti a způsobu použití metadat na vlastní vlastnost závislosti. Pro kontext viz vlastní závislostní vlastnosti a metadata závislostních vlastností .
Existující vlastnosti závislosti Read-Only
Některé vlastnosti závislosti definované v rozhraní WPF (Windows Presentation Foundation) jsou jen pro čtení. Typickým důvodem pro zadání vlastnosti závislosti jen pro čtení je, že se jedná o vlastnosti, které by se měly použít k určení stavu, ale kde je tento stav ovlivněn mnoha faktory, ale nastavení vlastnosti na tento stav není žádoucí z hlediska návrhu uživatelského rozhraní. Například vlastnost IsMouseOver je skutečně jen povrchní stav, jak je určeno vstupem myši. Jakékoli pokusy o programové nastavení této hodnoty obcházením skutečného vstupu myši by byly nepředvídatelné a způsobily by nekonzistence.
Vzhledem k tomu, že vlastnosti závislosti jsou pouze pro čtení a nelze je nastavit, nejsou vhodné pro mnoho scénářů, pro které vlastnosti závislosti obvykle nabízejí řešení (konkrétně: datová vazba, stylizovatelné přímo na hodnotu, ověření, animace, dědičnost). I když nelze vlastnosti závislosti jen pro čtení nastavit, stále mají některé další funkce, které systém vlastností podporuje. Nejdůležitější zbývající vlastnost je, že vlastnost pouze pro čtení závislosti je stále možné použít jako spouštěč vlastnosti ve stylu. Triggery s normální vlastností CLR (Common Language Runtime) nelze povolit; musí to být vlastnost závislosti. Výše uvedená IsMouseOver vlastnost je dokonalým příkladem scénáře, kdy může být docela užitečné definovat styl ovládacího prvku, kde některé viditelné vlastnosti, jako je pozadí, popředí nebo podobné vlastnosti složených prvků v ovládacím prvku se změní, když uživatel umístí myš na některou definovanou oblast ovládacího prvku. Změny vlastnosti závislosti jen pro čtení lze také detekovat a hlásit vlastními procesy zneplatnění systému vlastností a to ve skutečnosti podporuje funkci aktivace vlastnosti interně.
Vytváření vlastních vlastností závislostí Read-Only
Nezapomeňte si přečíst výše uvedený oddíl týkající se toho, proč vlastnosti závislostí jen pro čtení nebudou fungovat pro mnoho typických scénářů závislostí. Pokud ale máte vhodný scénář, můžete chtít vytvořit vlastní vlastnost závislosti pouze pro čtení.
Většina procesu vytváření vlastnosti závislosti jen pro čtení je stejná, jak je popsáno v tématech Vlastní vlastnosti závislosti a Implementace vlastnosti závislosti. Existují tři důležité rozdíly:
Při registraci vlastnosti volejte metodu RegisterReadOnly namísto normální metody Register pro registraci vlastnosti.
Při implementaci vlastnosti "obálka" CLR se ujistěte, že obálka také nemá nastavenou implementaci, takže pro veřejný obálku, který zveřejňujete, neexistuje žádná nekonzistence ve stavu jen pro čtení.
Objekt vrácený registrací jen pro čtení je DependencyPropertyKey místo DependencyProperty. Toto pole byste přesto měli uložit jako člena, ale obvykle byste ho nedělali jako veřejný člen typu.
Jakýkoli soukromý pole nebo hodnotu, kterou máte jako základ pro vaši vlastnost závislosti jen pro čtení, mohou být samozřejmě plně zapisovatelné pomocí libovolné logiky, kterou zvolíte. Nejjednodušším způsobem, jak nastavit vlastnost buď původně, nebo jako součást logiky modulu runtime, je použít rozhraní API systému vlastností, nikoli obejít systém vlastností a přímo nastavit privátní backingové pole. Konkrétně existuje podpis SetValue, který přijímá parametr typu DependencyPropertyKey. Jak a kde tuto hodnotu nastavíte programově v rámci logiky aplikace, bude mít vliv na to, jak můžete chtít nastavit přístup na DependencyPropertyKey vytvořené při první registraci vlastnosti závislosti. Pokud tuto logiku zpracujete v rámci třídy, můžete ji nastavit jako soukromou, nebo pokud ji potřebujete nastavit z jiných částí sestavení, můžete ji nastavit interně. Jedním z přístupů je volání SetValue v obslužné rutině relevantní události třídy, která informuje instanci třídy, že uložená hodnota vlastnosti musí být změněna. Dalším přístupem je spojit vlastnosti závislosti pomocí zpětných volání spárovaných PropertyChangedCallback a CoerceValueCallback v metadatech těchto vlastností při jejich registraci.
Vzhledem k tomu, že DependencyPropertyKey je privátní a není šířena systémem vlastností mimo váš kód, vlastnost závislostí jen pro čtení má lepší nastavení zabezpečení než vlastnost závislosti pro čtení i zápis. U vlastnosti závislosti pro čtení i zápis je identifikační pole explicitně nebo implicitně veřejné, a proto je vlastnost široce nastavená. Další podrobnosti najdete v tématu zabezpečení závislostních vlastností.
Viz také
- Přehled vlastností závislosti
- Vlastní vlastnosti závislosti
- stylování a šablonování
.NET Desktop feedback