Вам нужно использовать set_error_handler
для отлова ошибок / предупреждений / уведомлений и т. Д.
Вот пример:
// PHP Errors to Exceptions.
set_error_handler(function (
$err_severity,
$err_msg,
$err_file,
$err_line,
array $err_context
) {
// error was suppressed with the @-operator
if (0 === error_reporting()) {
return false;
}
switch ($err_severity) {
case E_WARNING:
throw new Exception(
$err_msg,
0,
$err_severity,
$err_file,
$err_line
);
}
});
Чтобы сделать так, необходимо было бы переопределить стиль для treeview. Идеально у Вас будет два типа treeview объектов один для Ваших узлов верхнего уровня (im принятие папок) и другой просто для детей, затем необходимо смочь определить, как каждый тип изделия в дереве ведет себя. Поэтому создайте стиль для каждого типа изделия, затем для узла папки просто изменяются, триггер для выбран, чтобы ничего не сделать.
Я написал в прикрепленном свойстве, что будет отменять выбор элемента древовидного просмотра, как только он будет выбран:
public class TreeViewItemHelper
{
public static bool GetIsSelectable(TreeViewItem obj)
{
return (bool)obj.GetValue(IsSelectableProperty);
}
public static void SetIsSelectable(TreeViewItem obj, bool value)
{
obj.SetValue(IsSelectableProperty, value);
}
public static readonly DependencyProperty IsSelectableProperty =
DependencyProperty.RegisterAttached("IsSelectable", typeof(bool), typeof(TreeViewItemHelper), new UIPropertyMetadata(true, IsSelectablePropertyChangedCallback));
private static void IsSelectablePropertyChangedCallback(DependencyObject o, DependencyPropertyChangedEventArgs args)
{
TreeViewItem i = (TreeViewItem) o;
i.Selected -= OnSelected;
if(!GetIsSelectable(i))
{
i.Selected += OnSelected;
}
}
private static void OnSelected(object sender, RoutedEventArgs args)
{
if(sender==args.Source)
{
TreeViewItem i = (TreeViewItem)sender;
i.IsSelected = false;
}
}
}
К сожалению, вы все еще теряете старый выбор, когда вы щелкаете по невыбираемому элементу: (