我接受了所有人的建議,並將我的應用移植到了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