如何在devexpress docklayoutmanager中绑定面板和控件
本文关键字:控件 绑定 devexpress docklayoutmanager | 更新日期: 2023-09-27 18:00:29
文件名SampleProject我的xaml文件Mainwindow.xaml---------
<Window x:Class="SampleProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dxdo="http://schemas.devexpress.com/winfx/2008/xaml/docking" Closing="Window_Closing"
Title="MainWindow" Height="800" Width="800" WindowState="Maximized">
<Grid>
<dxdo:DockLayoutManager x:Name="docklayoutmanager1" dxdo:RestoreLayoutOptions.RemoveOldPanels="False" dxdo:RestoreLayoutOptions.RemoveOldLayoutControlItems="False" Margin="0,50,0,0">
</dxdo:DockLayoutManager>
<Button Width="100" VerticalAlignment="Top" HorizontalAlignment="Center" Height="30" x:Name="ClickMe" Content="Click Me" Click="ClickMe_Click" Margin="323,10,369,729" />
</Grid>
</Window>
`我的xaml.cs文件MainWindow.xaml.cs----------------
using DevExpress.Xpf.Docking;
using DevExpress.Xpf.Layout.Core;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace SampleProject
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
if(File.Exists("test.xml"))
{
docklayoutmanager1.RestoreLayoutFromXml("test.xml");
}
}
private void ClickMe_Click(object sender, RoutedEventArgs e)
{
var panel = docklayoutmanager1.DockController.AddPanel(DockType.None);
panel.Caption = "Test Panel";
panel.Name = "myPanel";
panel.Content = "I want to serialize this code using guid Please provide example for creating such binding.";
FloatGroup floatgroup = new FloatGroup();
floatgroup.Name = "myFloatGroup";
floatgroup.FloatSize = new Size(500,500);
floatgroup.FloatLocation = new Point(300, 300);
floatgroup.Add(panel);
docklayoutmanager1.FloatGroups.Add(floatgroup);
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
string xmlFilePath = System.AppDomain.CurrentDomain.BaseDirectory + "test.xml";
if (File.Exists("test.xml"))
{
docklayoutmanager1.SaveLayoutToXml("test.xml");
}
else
{
using (File.Create("test.xml")) { }
docklayoutmanager1.SaveLayoutToXml("test.xml");
}
}
}
}
我有一个文档布局管理器,以编程方式获取面板和控件,其中包含面板和控件。
在保存时,我使用面板的SaveLayoutToXml()
和使用bformatter.Serialize();
的序列化控件来实现这一点。
因为我有很多面板和独特的控制。我想在保存和序列化之前,将相同的控件放回相同的面板中。请为我提供一个代码,以识别面板和控件的唯一id。
我有没有可以分配GUID的整数id,因为BindableName不适用。
谢谢Desh
以编程方式创建面板,并在运行时将其添加到xaml文件中。
UserC = new UserC();
DocumentPanel dpanel = new DocumentPanel();
dpanel.Name = "OpenUC" + count;
dpanel.Caption = "Open User Control";
dpanel.BindableName = "OpenUC" + count;
var content = UserC;
dpanel.Content = content;
FloatGroup fGroup = new FloatGroup();
fGroup.FloatSize = new Size(500, 500);
fGroup.Items.Add(dpanel);
DockLayoutManager1.FloatGroups.Add(fGroup);
这是如何添加用户控件的,因为似乎没有人感兴趣提供帮助,我搜索并做了这样的事情:
private FloatGroup CreateDocPanelFloatGroup(DocumentPanel dp)
{
FloatGroup floatGroup = new FloatGroup();
floatGroup.FloatSize = new Size(500, 500);
floatGroup.Items.Add(dp);
return floatGroup;
}
private void OpenUC_ItemClick(object sender, DevExpress.Xpf.Bars.ItemClickEventArgs e)
{
openUC = new OpenUC();
DocumentPanel dp = new DocumentPanel();
dp.Name = "OpenUC" + count;
dp.Caption = "Open User Control";
dp.BindableName = "OpenUC" + count;
var content = openUC;
dp.Content = content;
DockLayoutManager1.FloatGroups.Add(CreateDocPanelFloatGroup(dp));
}