Me gustaría cambiar las propiedades de un ScrollViewer
de un ListBox
desde C#.Accediendo al ScrollViewer de un ListBox desde C#
Encontré this question aquí en Stackoverflow. Tomé el consejo de la respuesta aceptada y expuse el ScrollViewer
como una propiedad de una subclase. Sin embargo, esto no parece estar funcionando en un ejemplo que se muestra a continuación. Algunos de los comentarios en esa pregunta también afirman que esta técnica no funcionó.
XAML:
<Window x:Class="StackoverflowListBoxScrollViewer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
</Window>
C#:
using System;
using System.Windows;
using System.Windows.Controls;
namespace StackoverflowListBoxScrollViewer
{
public class MyListBox : ListBox
{
public ScrollViewer ScrollViewer
{ get { return (ScrollViewer)GetTemplateChild("ScrollViewer"); } }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
var myListBox = new MyListBox();
Content = myListBox;
myListBox.Items.Add(new Button() { Content = "abc" });
myListBox.Items.Add(new Button() { Content = "abc" });
myListBox.Items.Add(new Button() { Content = "abc" });
myListBox.Items.Add(new Button() { Content = "abc" });
myListBox.Items.Add(new Button() { Content = "abc" });
var button = new Button() { Content = "Check ScrollViewer" };
button.Click += (s, e) =>
{
if (myListBox.ScrollViewer == null)
Console.WriteLine("null");
};
myListBox.Items.Add(button);
}
}
}
Al hacer clic en el botón "Comprobar ScrollViewer", se imprime "nulo". Es decir, el ScrollViewer
no fue recuperado.
¿Cómo llego a ese maldito ScrollViewer
? :-)
Consulte igualmente http://stackoverflow.com/questions/3963341/get-reference-to-my-wpf-listboxs-scrollviewer-in-c – Klaus78
... y realmente no debería llamar a su ScrollViewer-Property "ScrollViewer". – basti
@chiffre: ¿por qué no? En realidad, se encuentra en las Pautas de nombres de .NET para las propiedades: ** Considere dar a una propiedad el mismo nombre que su tipo. ** (http://msdn.microsoft.com/en-us/library/ms229012.aspx) –