我接受了所有人的建议,并将我的应用移植到了SlimDX。这并不算太差(几乎每个类/方法/字段在SlimDX中的命名与MDX完全相同)。不幸的是,我仍然有同样的问题。我能够将SlimDX和MDX简化到以下应用程序:
public partial class MainForm : Form
{
Direct3D Direct3D = new Direct3D();
Panel slimPanel = new Panel();
public MainForm()
{
InitializeComponent();
CreateDevice();
BuildWindows();
}
void BuildWindows()
{
var listBox = new System.Windows.Controls.ListBox();
listBox.ItemsSource = Enumerable.Range(0, 100);
var elementHost = new ElementHost();
elementHost.Child = listBox;
elementHost.Dock = DockStyle.Fill;
Controls.Add(elementHost);
slimPanel.Dock = DockStyle.Left;
Controls.Add(slimPanel);
}
void CreateDevice()
{
PresentParameters presentParams = new PresentParameters();
presentParams.BackBufferHeight = slimPanel.ClientRectangle.Height;
presentParams.BackBufferWidth = slimPanel.ClientRectangle.Width;
presentParams.DeviceWindowHandle = slimPanel.Handle;
var device = new Device(Direct3D, 0, DeviceType.Hardware, slimPanel.Handle, CreateFlags.HardwareVertexProcessing, presentParams);
}
}
滚动条不会显示。我能够让滚动条显示是否确保列表框在设备创建之前被绘制。
最终的解决方案是在构造函数中将WPF ListBox添加到我的表单中,然后在表单完成加载后将其删除。我不确定这是否是WPF或DirectX中的错误,我可能会尝试向Microsoft提交错误。
顺便说一句,我不能让XNA导致这个问题。
感谢您的写作,但我现在无法退出MDX。我一定会喜欢将来。 – 2009-07-10 20:44:51