リスト ボックスの下部にテキストを追加して表示する方法を理解しようとしています。コードビハインドのあるWPFでは、ScrollViewerを取得して操作しますが、Caliburnでそれを行う方法がわかりません...
質問する
177 次
1 に答える
2
いくつかのオプションがあります。
1)ViewModelで、ViewModelを呼び出しGetView
てビュータイプにキャストし、ScrollViewerへの参照を取得できます。何かのようなもの:
var myView = this.GetView() as MyView;
var myScrollView = myView.MyScrollView;
これは問題なく機能しますが、ビューをビューモデルに結合しないようにする場合は理想的ではありません。
オプション2)は、IResultを実装することです。ここのドキュメントを参照してください。
public class ScrollViewResult : IResult
{
public event EventHandler<ResultCompletionEventArgs> Completed = delegate { };
private ScrollViewResult ()
{
}
public void Execute (ActionExecutionContext context)
{
var view = context.View as FrameworkElement;
var scrollViewer = FindVisualChild<ScrollViewer>(view);
//do stuff to scrollViewer here
Completed (this, new ResultCompletionEventArgs { });
}
private static TChildItem FindVisualChild<TChildItem> (DependencyObject obj)
where TChildItem : DependencyObject
{
for (var i = 0; i < VisualTreeHelper.GetChildrenCount (obj); i++)
{
var child = VisualTreeHelper.GetChild (obj, i);
if (child != null && child is TChildItem)
return (TChildItem)child;
var childOfChild = FindVisualChild<TChildItem> (child);
if (childOfChild != null)
return childOfChild;
}
return null;
}
//this isn't required of course but comes in handy for
//having a static method and passing parameters to the
//ctor of the IResult
public static IResult DoSomething ()
{
return new ScrollViewResult ();
}
次に、次のように呼び出すことができます。
public IEnumerable<IResult> SomeAction()
{
yield return ScrollViewResult.DoSomething();
}
于 2012-11-04T22:30:36.657 に答える