TemplateBinding: член <> не распознается или недоступен

Я новичок в С#, магазине приложений для Windows, и я борюсь с проблемой. Я хочу реализовать некоторые элементы управления шаблонами, которые состоят из всплывающего окна с кольцом прогресса и текстом.

В классе Template (CustomProgressRing.cs) я хочу иметь возможность манипулировать закрытым всплывающим окном и его свойствами. Мне удалось с помощью TextBlock установить его Text prop как TempalteBinding, поэтому в классе я могу получить доступ к свойству TextBlock Text. Я хочу применить TemplateBinding к подсказке IsOpen всплывающего окна, но я получаю ошибку:  The member "IsOpen" is not recognized or is not accessible

Ниже приведена xaml:


Вот CustomProgressRing.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Documents;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using System.Diagnostics;
// The Templated Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234235
namespace QSTLibrary.WIN8.Tools
{
 public sealed class CustomProgressRingPopup : Control
 {
 public CustomProgressRingPopup()
 {
 this.DefaultStyleKey = typeof(CustomProgressRingPopup);
 }
 public string Text
 {
 get { return (string)GetValue(TextProperty); }
 set { SetValue(TextProperty, value); }
 }
 // Using a DependencyProperty as the backing store for Text. This enables animation, styling, binding, etc...
 public static readonly DependencyProperty TextProperty =
 DependencyProperty.Register(
 "Text", 
 typeof(string), 
 typeof(CustomProgressRingPopup), 
 new PropertyMetadata("Void", new PropertyChangedCallback(OnTextChanged)));
 private void ProgressRingPopup_Opened(object sender, object e)
 {
 Debug.WriteLine("Popup opened");
 }
 private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
 {
 CustomProgressRingPopup instance = d as CustomProgressRingPopup;
 if (instance != null)
 {
 string newValue = e.NewValue as string;
 instance.Text = newValue;
 //instance.IsOpen = true; - not working
 }
 }
 }
}

Почему я не могу установить templateBinding для опоры IsOpen всплывающего окна?

1 ответ

Как вы извлекаете CustomProgressRingPopup из Control, потому что вы не получаете свойство IsOpen. Вы должны определить собственное свойство Dependancy IsOpen в CustomProgressRingPopup для его обработки, что является частью работы.

Template binding searches the Property in the control that is being templated.

licensed under cc by-sa 3.0 with attribution.