Как я могу поставить тему для моей программы SWT WPF? - PullRequest
4 голосов
/ 16 марта 2012

Я хочу использовать WPF в Windows-версии моего Java-приложения. Я обнаружил, что это легко сделать с помощью SWT, и он также поддерживает wpf ResourceDictionary XAML для элементов SWT (, см. Это ). У меня хорошо работает реализация 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);

    }
}

Ответы [ 2 ]

1 голос
/ 13 июля 2012

SWT WPF больше не поддерживается. Так что лучше его не использовать.

0 голосов
/ 18 апреля 2012

Я должен признать, что я не использовал 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), называемый «CustomShellTemplateFile.xaml»), вы можете сделать что-то вроде

shell.setData ("ResourceDictionary", "CustomShellTemplateFile.xaml");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...