Как исправить конфликт BringIntoView и e.Handled?

103
16 июня 2019, 12:20

Не работает автопрокрутка (вертикальная) при отключеном автосдвиге(горизонтальной прокрутки при выделении с длинным названием item) горизонтальной панели.

Конфликт e.Handled = true; и item.BringIntoView

Как исправить конфликт BringIntoView и e.Handled ?

EventSetter Event="RequestBringIntoView" Handler="TreeViewItem_RequestBringIntoView"/>
<Setter Property="localModels:TreeViewItemBehavior.IsBroughtIntoViewWhenSelected" Value="True" />
private void TreeViewItem_RequestBringIntoView(object sender, RequestBringIntoViewEventArgs e)
    {
        e.Handled = true;
    }

Делаю всё как описано в примере.

https://stackoverflow.com/questions/41589389/c-sharp-wpf-errorthe-name-treeviewitembehavior-does-not-exist-in-the-namespac

Но у меня не работает автопрокрутка scroll при выборе Item .

xmlns:localModels="clr-namespace:ChartsDisplayer2016.Core.DataSelector.Models;assembly=ModelAssemblyName"

<Grid >
<TreeView x:Name="tree" >
<TreeView.Resources>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
    <Style TargetType="{x:Type TreeViewItem}" >
        <Style.Resources>
        </Style.Resources>
            <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True" >
            <Setter Property="localModels:TreeViewItemBehavior.IsBroughtIntoViewWhenSelected" Value="True" />

TreeViewItemBehavior

public static class TreeViewItemBehavior
{
    #region IsBroughtIntoViewWhenSelected
    public static bool GetIsBroughtIntoViewWhenSelected(TreeViewItem treeViewItem)
    {
        return (bool)treeViewItem.GetValue(IsBroughtIntoViewWhenSelectedProperty);
    }
    public static void SetIsBroughtIntoViewWhenSelected(
      TreeViewItem treeViewItem, bool value)
    {
        treeViewItem.SetValue(IsBroughtIntoViewWhenSelectedProperty, value);
    }
    public static readonly DependencyProperty IsBroughtIntoViewWhenSelectedProperty =
        DependencyProperty.RegisterAttached(
        "IsBroughtIntoViewWhenSelected",
        typeof(bool),
        typeof(TreeViewItemBehavior),
        new UIPropertyMetadata(false, OnIsBroughtIntoViewWhenSelectedChanged));
    static void OnIsBroughtIntoViewWhenSelectedChanged(
      DependencyObject depObj, DependencyPropertyChangedEventArgs e)
    {
        TreeViewItem item = depObj as TreeViewItem;
        if (item == null)
            return;
        if (e.NewValue is bool == false)
            return;
        if ((bool)e.NewValue)
            item.Selected += OnTreeViewItemSelected;
        else
            item.Selected -= OnTreeViewItemSelected;
    }
    static void OnTreeViewItemSelected(object sender, RoutedEventArgs e)
    {
        // Only react to the Selected event raised by the TreeViewItem
        // whose IsSelected property was modified. Ignore all ancestors
        // who are merely reporting that a descendant's Selected fired.
        if (!Object.ReferenceEquals(sender, e.OriginalSource))
            return;
        TreeViewItem item = e.OriginalSource as TreeViewItem;
        if (item != null)
            item.BringIntoView();
        e.Handled = true;
    }
    #endregion // IsBroughtIntoViewWhenSelected
}
READ ALSO
Что за оператор ^=

Что за оператор ^=

Привествую, недавно увидел такой оператор ^=, но так и не нашел что он делает, применялся он к int, знаю что ^ это ислючения, но ^= да еще и для intЧТо...

110
Ошибка при создании объекта

Ошибка при создании объекта

При создании Table Unit выдаёт Предполагаемый лог UnitTest https://yadisk/d/KnbKKhyEYZq6Hw При этом, если в методе CreateRows будет отсутствовать строка r[i] = new Row(this,...

88
Как отправить textbox1.Text через smtp, если он многострочный?

Как отправить textbox1.Text через smtp, если он многострочный?

Воспользовался этим кодом, но он отправляет только однострочные сообщения, что делать?

88