Silverlight中的单侧圆形按钮

如何解决Silverlight中的单侧圆形按钮

| 我想在Silverlight中收集按钮。 它们在从左到右的集合中,并且按钮排列成一行,以便它们左右接触。 这是摩擦: 集合具有圆角,但是集合中结束按钮之间的按钮没有倒角。因此,基本上,对于集合最左侧和右侧的按钮,它们必须有些特殊,因为它们必须具有一个扁平的垂直侧和一个圆形的侧。这可以在Silverlight中完成而无需诉诸末端按钮的特殊位图吗? 我的一个想法是以某种方式声明一个具有位图背景的画布,然后具有重叠的椭圆和矩形
        <Canvas Height=\"100\" HorizontalAlignment=\"Left\" Margin=\"189,381,0\" VerticalAlignment=\"Top\" Width=\"200\" Background=\"Black\">
            <Rectangle Fill=\"#FFF4F4F5\" HorizontalAlignment=\"Left\"  Stroke=\"Black\" Width=\"58\" Height=\"61\" Canvas.Left=\"7\" Canvas.Top=\"16\" />
            <Ellipse Fill=\"#FFF4F4F5\" HorizontalAlignment=\"Left\"  Stroke=\"White\" Width=\"65\" StrokeThickness=\"0\" Height=\"59\" Canvas.Left=\"31\" Canvas.Top=\"17\" />
        </Canvas> 
    

解决方法

        这是您尝试实现的效果的一个简单示例,该效果利用自定义
ControlTemplate
通过三种方式对按钮进行外观设置:
<Grid HorizontalAlignment=\"Center\">
    <Grid.Resources>
        <Style x:Key=\"ButtonLeftStyle\" TargetType=\"Button\">
            <Setter Property=\"Template\">
                <Setter.Value>
                    <ControlTemplate TargetType=\"Button\">
                        <Border Background=\"DarkGray\" CornerRadius=\"10,10\">
                            <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key=\"ButtonCenterStyle\" TargetType=\"Button\">
            <Setter Property=\"Template\">
                <Setter.Value>
                    <ControlTemplate TargetType=\"Button\">
                        <Border Background=\"DarkGray\" CornerRadius=\"0,0\">
                            <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        <Style x:Key=\"ButtonRightStyle\" TargetType=\"Button\">
            <Setter Property=\"Template\">
                <Setter.Value>
                    <ControlTemplate TargetType=\"Button\">
                        <Border Background=\"DarkGray\" CornerRadius=\"0,10,0\">
                            <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>
    <StackPanel Orientation=\"Horizontal\">
        <Button Width=\"75\" Height=\"25\" Style=\"{StaticResource ButtonLeftStyle}\" Content=\"Left\"/>
        <Rectangle Width=\"2\"/>
        <Button Width=\"75\" Height=\"25\" Style=\"{StaticResource ButtonCenterStyle}\" Content=\"Center\"/>
        <Rectangle Width=\"2\"/>
        <Button Width=\"75\" Height=\"25\" Style=\"{StaticResource ButtonRightStyle}\" Content=\"Right\"/>
    </StackPanel>
</Grid>
看起来像: 您可以在此处执行更多操作,但这显示了可以使用的方法。这是一篇很棒的博客文章,其中包含有关此技术的更多信息和示例: Silverlight教程第7部分:使用控件模板来自定义控件的外观     ,        我通过视觉技巧解决了这个问题。首先,我的把戏要求我将按钮放置在代表背景的图像上。这些按钮有些透明,所以背景的颜色也很透明 中间的按钮是简单的矩形画布类。而结束按钮具有圆形末端。 中间的按钮位于末端按钮的前面,并且它们重叠。 这些按钮是透明的,因此通常不起作用,因为您可以看到中间按钮后面的末端按钮边缘。我通过在矩形框的前面放置一个填充有背景图像颜色“ \”之间的矩形(以3D分层深度术语来思考),并在其上方设置了矩形按钮。彩色矩形仅位于结束按钮的前面,而结束按钮位于它们前面的矩形按钮的后面。 这是一种破解,但确实有效。有时间时,我将尝试此处建议的解决方案。     ,        是的,甚至更简单,基于Rick \ S,因为您只想使用样式来解决按钮模板边框的圆角:
<Grid HorizontalAlignment=\"Center\">
  <Grid.Resources>
   <!-- Default Template -->
    <ControlTemplate TargetType=\"Button\">
         <Border x:Name=\"Border\" Background=\"DarkGray\" CornerRadius=\"0\">
              <ContentPresenter HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\"/>
         </Border>
    </ControlTemplate>
    <!-- Custom Styles for edges -->
    <Style x:Key=\"ButtonLeftStyle\" TargetType=\"Button\">
        <Setter Property=\"CornerRadius\" Value=\"10,10\" TargetName=\"Border\"/>
    </Style>
    <Style x:Key=\"ButtonRightStyle\" TargetType=\"Button\">
       <Setter Property=\"CornerRadius\" Value=\"0,0\" TargetName=\"Border\"/>
    </Style>
</Grid.Resources>
<StackPanel Orientation=\"Horizontal\">
    <Button Width=\"75\" Height=\"25\" Style=\"{StaticResource ButtonLeftStyle}\" Content=\"Left\"/>
    <Rectangle Width=\"2\"/>
    <Button Width=\"75\" Height=\"25\" Content=\"Center\"/>
    <Rectangle Width=\"2\"/>
    <Button Width=\"75\" Height=\"25\" Style=\"{StaticResource ButtonRightStyle}\" Content=\"Right\"/>
</StackPanel>
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-