我想在我的java应用程序的Windows版本上使用WPF。我发现使用SWT很容易做到这一点,它也支持SWT元素的wpf ResourceDictionary XAML(please see this)。 SWT WPF实现对我很有用,但我无法找到如何将WPF theme放在上面。某些SWT小部件org.eclipse.swt.widgets.Button
具有setData
方法,但其中一些像org.eclipse.swt.widgets.Display
那样没有这种方法。 setDate
上的shell
方法也不会在整个窗口上设置主题。
那么如何为SWT WPF程序的整个窗口添加主题?
以下是示例代码:
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.MenuItem;
public class MainForm {
protected Shell shell;
public static void main(String[] args) {
try {
MainForm window = new MainForm();
window.open();
} catch (Exception e) {
e.printStackTrace();
}
}
public void open() {
Display display = Display.getDefault();
createContents();
shell.open();
shell.layout();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
}
protected void createContents() {
shell = new Shell();
shell.setData(
"ResourceDictionary",
"ExpressionDark.xaml");
// theme not applied on entire window, just buttons
shell.setSize(450, 300);
shell.setText("Window Title");
Button button = new Button(shell, SWT.FLAT);
button.setText("Button");
button.setSize(250, 50);
button.setBounds(0, 50, 250, 50);
Menu menu = new Menu(shell, SWT.BAR);
shell.setMenuBar(menu);
MenuItem mntmNewSubmenu = new MenuItem(menu, SWT.CASCADE);
mntmNewSubmenu.setText("New SubMenu");
Menu menu_1 = new Menu(mntmNewSubmenu);
mntmNewSubmenu.setMenu(menu_1);
}
}
答案 0 :(得分:1)
SWT WPF is no longer supported.所以最好不要使用。
答案 1 :(得分:0)
我必须承认我没有使用SWT WPF,所以这可能根本不起作用,但如果您使用的是标准WPF,这通常会做什么
<Window
....
....
....
ResizeMode="CanResizeWithGrip"
Template="{StaticResource WindowTemplateKey}">
</Window>
你将拥有类似这样的模板
<!-- Custom Window : to allow repositioning of ResizeGrip-->
<ControlTemplate x:Key="WindowTemplateKey" TargetType="{x:Type Window}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<AdornerDecorator>
<ContentPresenter/>
</AdornerDecorator>
<ResizeGrip Visibility="Collapsed"
HorizontalAlignment="Right" x:Name="WindowResizeGrip"
Style="{DynamicResource ResizeGripStyle1}"
VerticalAlignment="Bottom" IsTabStop="false"/>
</Grid>
</Border>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="ResizeMode" Value="CanResizeWithGrip"/>
<Condition Property="WindowState" Value="Normal"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility"
TargetName="WindowResizeGrip" Value="Visible"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
所以我想你提供了一个Window(在你的情况下,在一个单独的ResourceDictionary(XAML文件)中指定Shell,称为&#34; CustomShellTemplateFile.xaml&#34;)你可以做类似的事情
shell.setData( &#34;的ResourceDictionary&#34 ;, &#34; CustomShellTemplateFile.xaml&#34);