Я использую указанную технику для регистрации всех запросов и ответов. Говоря коротко, лучший способ сделать это - использовать Handlers.
Сначала создайте обработчик:
public class CustomHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
//get route values and process them
var routeValues = (IHttpRouteData[]) HttpContext.Current.Request.RequestContext.RouteData.Values["MS_SubRoutes"];
//let other handlers process the request
return await base.SendAsync(request, cancellationToken)
.ContinueWith(task =>
{
//once response is ready, do something with it
return task.Result;
}, cancellationToken);
}
}
Затем зарегистрируйте его в WebApiConfig:
config.MessageHandlers.Add(new CustomHandler());
Самый чистый путь состоит в том, чтобы выставить желаемые свойства как свойства Вашего usercontrol, например:
class MyUserControl
{
// expose the Text of the richtext control (read-only)
public string TextOfRichTextBox
{
get { return richTextBox.Text; }
}
// expose the Checked Property of a checkbox (read/write)
public bool CheckBoxProperty
{
get { return checkBox.Checked; }
set { checkBox.Checked = value; }
}
//...
}
Таким образом можно управлять, какие свойства Вы хотите выставить и должны ли они быть чтением-записью или только для чтения. (конечно, необходимо использовать лучшие названия свойств, в зависимости от их значения).
Другое преимущество этого подхода состоит в том, что он скрывает внутреннюю реализацию Вашего пользовательского элемента управления. Если Вы когда-либо хотите обмениваться своим управлением обогащенным текстом с другим, Вы не повредите вызывающие стороны/пользователей своего управления.
Измените модификатор доступа ("Модификаторы") RichTextBox в сетке свойства Общественности.
Добавьте свойство к usercontrol как это
public string TextBoxText
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
Необходимо сделать общественную собственность для richtextbox или выставить некоторое другое свойство, которое делает задание установки richtextbox текста как:
private RichTextBox rtb;
public string RichTextBoxText
{
get
{
return rtb.Text;
}
set
{
rtb.Text = value;
}
}
Недавно у меня возникли некоторые проблемы при выполнении этого с помощью настраиваемого класса :
Пользовательский элемент управления имел общедоступное свойство, которое относилось к типу настраиваемого класса. Дизайнер по умолчанию пытается присвоить ему какое-то значение, поэтому в коде конструктора строка userControlThing.CustomClassProperty = null
добавлялся автоматически.
Намерение состояло в том, чтобы иметь возможность предоставить пользовательскому элементу управления настраиваемый класс в любой момент во время выполнения программы (для изменения значений, видимых пользователю). Поскольку устанавливает {}
не проверяла нулевые значения, возникали различные ошибки.
Решением было изменить свойство на частное и использовать два общедоступных метода для установки и получения значения. Разработчик попытается автоматически назначить свойства, но оставляет методы в покое.