如何动态地将控件添加到另一个类中 wrappanel

如何动态地将控件添加到另一个类中 wrappanel,第1张

您好,我来为您解答:

首先,您必须在代码中 *** 作的用户界面元素,留下的传统思想和拥抱MVVM。

WPF 具有非常强大的数据绑定功能,完全彻底缺席古代恐龙框架中。

看到,我如何使用可重复使用 Command 类 (这是种基本大多数使用 MVVM 框架的一部分) 来表示 Page1ViewModel 中的按钮。这些实例的 Command 然后添加到 ObservableCollection ,这反过来会通知 WPF 当一个元素是添加或删除它,并因而由自动更新用户界面 Binding 。

然后, DataTemplate 定义为 ItemTemplate 为 ItemsControl 的 Page1 用于"呈现"里面的每个项 ObservableCollection 。

这是我当我说 WPF 需要有真正不同的心态与工作的参考。这是对一切在 WPF 中,默认的方法。你几乎从来不会有需要引用 / 创建 / *** 作在程序代码中的 UI 元素。这是 XAML 的是什么。

此外请注意,这可能是简化了很多使用相同的 ViewModel 两个 Page s,,但分开他们的目的只是为了给你看这种情况下,如果有不同 ViewModels 互相沟通直接。

转载,仅供参考。

如果我的回答没能帮助您,请继续追问。

你现在就等于移动一个容器或者一个控件是吧。

那种无缝链接的效果我想到两种方案:

就是listbox绑定数据源,这个数据源在后台不断改变,用个定时器做。

就是在一个canvas里放两个横向接着的stackpanel。比如P1,P2。可视列表里轮播3张图 t1,t2,t3。你在P1和P2里分别放 t1,t2,t3。上面要做个遮罩层。

不断的移动stackpanel,当第一个stackpanel完全不可见的时候,从canvas里移除它并把它重新添加在canvas里面。

很简单

ScrollViewer scroll = RecursionFindControl<ScrollViewer>(控件名称)

scroll.ScrollChanged += Scroll_ScrollChanged

private void Scroll_ScrollChanged(object sender, ScrollChangedEventArgs e)

{

if(e.VerticalChange<0){

//向上

}else{

//向下

}

}

/// <summary>

/// 递归寻找指定名称和指定类型的控件

/// </summary>

/// <param name="reference">对象</param>

/// <param name="controlName">需要寻找的控件名称</param>

/// <param name="maxLevel">最大递归级数</param>

/// <param name="currentLevel">当前已经递归的级数</param>

/// <returns>DependencyObject</returns>

public static DependencyObject RecursionFindControl(DependencyObject reference, string controlName = "", int maxLevel = int.MaxValue, int currentLevel = 1)

{

return RecursionFindControl<DependencyObject>(reference, controlName, maxLevel, currentLevel)

}

/// <summary>

/// 递归寻找指定名称和指定类型的控件

/// </summary>

/// <typeparam name="T">寻找的类型</typeparam>

/// <param name="reference">对象</param>

/// <param name="controlName">需要寻找的控件名称</param>

/// <param name="maxLevel">最大递归级数</param>

/// <param name="currentLevel">当前已经递归的级数</param>

/// <returns>返回寻找的类型</returns>

public static T RecursionFindControl<T>(DependencyObject reference, string controlName = "", int maxLevel = int.MaxValue, int currentLevel = 1) where T : class

{

DependencyObject obj = null

if (reference == null)

{

return obj as T

}

for (int i = 0i <VisualTreeHelper.GetChildrenCount(reference)i++)

{

obj = VisualTreeHelper.GetChild(reference, i)

FrameworkElement elemnt = obj as FrameworkElement

if (elemnt == null)

{

break

}

if (elemnt is T &&

((!string.IsNullOrEmpty(controlName)

&&elemnt.Name == controlName)

|| string.IsNullOrEmpty(controlName)))

{

return obj as T

}

else

{

if (currentLevel <maxLevel)//递归层级限制

{

obj = RecursionFindControl<T>(obj, controlName, maxLevel, currentLevel + 1) as DependencyObject

if (obj != null)

{

return obj as T

}

}

}

}

return obj as T

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11823457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存